GNU/Linux >> Znalost Linux >  >> Linux

Může read(2) vrátit nulu, když není na EOF?

Po nějakém průzkumu skutečně existují určité okolnosti, za kterých vrátí 0, o kterých si možná nebudete myslet, že jsou "EOF".

Odvážné podrobnosti naleznete v definici POSIX pro read():http://opengroup.org/onlinepubs/007908775/xsh/read.html

Některé pozoruhodné jsou, když jej požádáte, aby přečetl 0 bajtů – dvakrát zkontrolujte, zda mu omylem nepředáváte 0 – a čtení za koncem „zapsané“ části souboru (ve skutečnosti můžete hledat za koncem souboru, který "rozšíří" soubor o nuly, pokud tam zapíšete, ale dokud to neuděláte, "EOF" je stále na konci již napsané části).

Můj nejlepší odhad je, že se někde dostáváte do problému s načasováním. Některé otázky, které si musíte položit, jsou "Jak se tyto soubory zapisují?" a "Jsem si jistý, že nemají nulovou délku, když se je pokouším číst?". V druhém případě můžete zkusit spustit stat() na souboru před jeho přečtením, abyste viděli, jaká je jeho aktuální velikost.


Jediný další případ, který mě napadá, že read() vrací 0 je, když předáte nbytes jako 0; někdy se to může stát, pokud předáváte velikost něčeho nebo jiného jako parametr. Mohlo by to být to, co se právě teď děje?

Pokud soubor není připraven ke čtení, mělo by se stát, že čtení vrátí -1 a errno je nastaveno na EAGAIN.


Linux
  1. Může být Bash skript připojen k souboru?

  2. Zaneprázdněná schránka Číst soubor řádek po řádku?

  3. Může být skript spustitelný, ale nečitelný?

  1. Číst řádkově orientovaný soubor, který nemusí končit novým řádkem?

  2. Kdy byl soubor vytvořen?

  3. soubor:příkaz nenalezen

  1. Jak mohu zkontrolovat, zda soubor existuje, a provést příkaz, pokud ne?

  2. Jak v Linuxu nastavím soubor trvale jen pro čtení, aby jej ani root nemohl upravovat?

  3. tar:krátké čtení