Mieux vaut tard que jamais :)
la réponse rapide est: "2 147 479 552 octets, si la version du noyau est 3,14 ou plus récente"
réponse détaillée:
Pour autant que je comprends, il s'agit d'écrire syscall:
http://man7.org/linux/man-pages/man2/write.2.html
1) tous les systèmes POSIX (linux, bsd, tout unix) sont garantis pour pouvoir écrire jusqu'à MAX_SSIZE octets
Selon POSIX.1, si le nombre est supérieur à SSIZE_MAX, le résultat est défini par l'implémentation; voir NOTES pour la limite supérieure sous Linux.
# getconf SSIZE_MAX
32767
2) Linux est garanti pour pouvoir écrire jusqu'à 1,99 Gio (et c'est une opération atomique pour le noyau Linux version 3.14 et plus récente)
Sous Linux, write () (et les appels système similaires) transfèrent au plus 0x7ffff000 (2 147 479 552) octets, renvoyant le nombre d'octets réellement transférés. (Cela est vrai sur les systèmes 32 bits et 64 bits.)
Mais c'est un fonctionnement atomique équitable uniquement à partir du noyau Linux 3.14
Selon POSIX.1-2008 / SUSv4, section XSI 2.9.7 («Interactions de thread avec des opérations de fichiers régulières»):
Toutes les fonctions suivantes doivent être atomiques les unes par rapport aux autres dans les effets spécifiés dans POSIX.1-2008 lorsqu'elles fonctionnent sur des fichiers normaux ou des liens symboliques: ...
Parmi les API répertoriées par la suite figurent write () et writev (2). Et parmi les effets qui devraient être atomiques entre les threads (et les processus), il y a les mises à jour du décalage de fichier. Cependant, sous Linux avant la version 3.14, ce n'était pas le cas: si deux processus qui partagent une description de fichier ouvert (voir open (2)) effectuent une écriture () (ou writev (2)) en même temps, alors le I Les opérations d'E / S n'étaient pas atomiques en ce qui concerne la mise à jour de l'offset de fichier, avec pour résultat que les blocs de données sortis par les deux processus pourraient (incorrectement) se chevaucher. Ce problème a été corrigé dans Linux 3.14.