lepší pozdě než nikdy :)
rychlá odpověď je:"2 147 479 552 bajtů, pokud je verze jádra 3.14 nebo novější"
podrobná odpověď:
Pokud jsem pochopil, jde o zápis syscall:
http://man7.org/linux/man-pages/man2/write.2.html
1) všechny systémy POSIX ( linux, bsd, všechny unix ) jsou zaručeně schopny zapisovat až MAX_SSIZE bajtů
Podle POSIX.1, pokud je počet větší než SSIZE_MAX, je výsledek definován implementací; viz POZNÁMKY pro horní limit v Linuxu.
# getconf SSIZE_MAX
32767
2) linux zaručeně dokáže zapisovat až 1,99 GiB (a je to atomická operace pro linuxové jádro verze 3.14 a novější)
V Linuxu write() (a podobná systémová volání) přenese maximálně 0x7ffff000 (2 147 479 552) bajtů, čímž vrátí počet skutečně přenesených bajtů. (To platí pro 32bitové i 64bitové systémy.)
Ale je to férový atomový provoz pouze z linuxového jádra 3.14
Podle POSIX.1-2008/SUSv4 sekce XSI 2.9.7 ("ThreadInteractions with Regular File Operations"):
Všechny následující funkce musí být atomické vůči sobě navzájem v efektech specifikovaných v POSIX.1-2008, když fungují s běžnými soubory nebo symbolickými odkazy:...
Mezi následně uvedená API jsou write() a writev(2). Mezi efekty, které by měly být atomické napříč vlákny (a procesy), patří aktualizace offsetu souboru. Nicméně na Linuxu před verzí 3.14 tomu tak nebylo:pokud dva procesy, které sdílejí otevřený popis souboru (viz open(2)) provádějí write() (nebo writev(2)) současně, pak I/O operace nebyly atomické s ohledem na aktualizaci offsetu souboru, v důsledku čehož se bloky datových výstupů těchto dvou procesů mohly (nesprávně) překrývat. Tento problém byl opraven v Linuxu 3.14.