Zapsání nula bytes chyba je
To je napsané kde?
Když se podíváte na ty příklady v manuálové stránce
explain_write, neúspěšný zápise se tam rozpoznává tak, že návratový kód je menší než nula. Myslíte, že to v té manuálové stránce je špatně?
Jak jsem psal výše, něco takového by vedlo k busy loop a nesmyslnému aplikačnímu kódu.
Ne nutně. Nikdo netvrdí, že když
write() vrátí nulu, musí ji vrátit i v příštím cyklu – v příštím cyklu už může být zápis úspěšnější a zapíše alespoň něco, nebo už se alespoň bude vědět příčina chyby a
write() vrátí chybu plus třeba
EAGAIN.
write() může skončit úspěšně i v případě předchozí chyby, proto tam ty chybové kódy jsou, aby se aplikace mohla rozhodnout, co má zkusit znovu a jak (EAGAIN, EINTR, ENOSPC).
Na druhé straně je třeba říct, že dokumentace (citace je z Linux man page, nikoliv POSIX specifikace) by mohla být napsaná jasněji
V té manuálové stránce je jasně napsáno, že i při úspěšném volání se může vrátit nula. Ale mohlo by tam být explicitně napsáno, že se pak má volání opakovat, stejně jako pro jiné případy,když nebylo zapsáno vše. Dokumentace k jiným knihovnám tu nulu často neřeší vůbec.
V POSIX specifikaci jsem také nenašel nic o tom, že by nula byla chyba.