HomeBlogMagic

Bugfix: fgets does not read line

Heute habe ich einen Fehler korrigieren müssen dessen Ursache ziemlich Mysteriös war.

Ausgangspunkt war diese Schleife: (natürlich aufs wesentliche gekürzt)

while(fgets(static_cast<char*>(pBuffer), static_cast<int>(uSize), stdin) != nullptr)
{
  iRet = CcStringUtil::strlen(static_cast<char*>(pBuffer));
}

Nach einer gewissen Zeit lieferte fgets keine eingebenen Zeilen mehr zurück, egal was und wie viel ich eingegeben habe. Bisher hatte ich mit fgets noch nie Probleme und das hat immer super funktioniert, bis heute.

Erst nachdem ich alle close() Funktionen abgefangen habe, konnte ich die Ursache ausmachen.

Grund war ein falsch initialisierter socket. Dieser wurde mit null statt mit -1 initialisiert. In Linux ist ein socket mit theoretisch gültig, weshalb ungültige Sockets am besten mit < 0 abgefragt werden und auch mit -1 initalisiert werden sollten.

Ein close auf einen 0 handle schließt den stdin.

Damit war der Fehler gefunden:

close(0);
Permalink: https://adirmeier.de/Blog/ID_254
Tags: Blog, bugfix, C/C++, Linuxvon am 2019-02-15