GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann read(2) Null zurückgeben, wenn es nicht bei EOF ist?

Nach einiger Recherche gibt es tatsächlich einige Umstände, unter denen es 0 zurückgibt, die Sie vielleicht nicht als "EOF" betrachten.

Die groben Details finden Sie in der POSIX-Definition für read():http://opengroup.org/onlinepubs/007908775/xsh/read.html

Einige bemerkenswerte sind, wenn Sie es auffordern, 0 Bytes zu lesen - überprüfen Sie, ob Sie nicht versehentlich 0 übergeben - und über das Ende des "geschriebenen" Teils der Datei hinauslesen (Sie können tatsächlich über das Ende hinaus suchen der Datei, die die Datei mit Nullen "erweitert", wenn Sie dort schreiben, aber bis Sie dies tun, steht "EOF" immer noch am Ende des bereits geschriebenen Teils).

Meine beste Vermutung ist, dass Sie irgendwo in ein Timing-Problem geraten. Einige Fragen, die Sie stellen müssen, lauten:"Wie werden diese Dateien geschrieben?" und "Bin ich sicher, dass sie keine Nulllänge haben, wenn ich versuche, sie zu lesen?". Für die zweite könnten Sie versuchen, ein stat() auf der Datei auszuführen, bevor Sie sie lesen, um zu sehen, wie ihre aktuelle Größe ist.


Der einzige andere Fall, in dem ich mir vorstellen kann, dass read() 0 zurückgibt, ist, wenn Sie nbytes als 0 übergeben; Manchmal kann das passieren, wenn Sie die Größe von irgendetwas als Parameter übergeben. Könnte das sein, was gerade passiert?

Wenn die Datei nicht zum Lesen bereit ist, sollte read -1 zurückgeben und errno auf EAGAIN gesetzt werden.


Linux
  1. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  2. Dateien finden, die ein Benutzer nicht lesen kann?

  3. Busy Box Datei zeilenweise lesen?

  4. Kann ein Skript ausführbar, aber nicht lesbar sein?

  5. Eine zeilenorientierte Datei lesen, die nicht mit einem Zeilenumbruch enden darf?

So lesen Sie eine Datei Zeile für Zeile in Bash

Konfigurationsbefehl kann nicht ausgeführt werden:„keine solche Datei oder kein solches Verzeichnis“?

Datei:Befehl nicht gefunden

Wie mache ich eine Datei unter Linux dauerhaft schreibgeschützt, sodass selbst Root sie nicht bearbeiten kann?

Finden Sie mithilfe des Shell-Skripts heraus, ob die Datei in HDFS vorhanden ist oder nicht

Shebang oder nicht Shebang