lebih baik terlambat daripada tidak sama sekali :)
jawaban cepatnya adalah:"2.147.479.552 byte, jika versi kernel 3.14 atau lebih baru"
jawaban mendetail:
Sejauh yang saya mengerti, ini tentang menulis syscall:
http://man7.org/linux/man-pages/man2/write.2.html
1) semua sistem POSIX ( linux, bsd, all unix ) dijamin dapat menulis hingga MAX_SSIZE byte
Menurut POSIX.1, jika count lebih besar dari SSIZE_MAX, hasilnya ditentukan oleh implementasi; lihat CATATAN untuk batas atas di Linux.
# getconf SSIZE_MAX
32767
2) linux dijamin dapat menulis hingga 1,99 GiB (dan ini adalah operasi atomik untuk kernel linux versi 3.14 dan yang lebih baru)
Di Linux, write() (dan panggilan sistem serupa) akan mentransfer paling banyak 0x7ffff000 (2.147.479.552) byte, mengembalikan jumlah byte yang sebenarnya ditransfer. (Hal ini berlaku pada sistem 32-bit dan 64-bit.)
Tapi itu operasi atom yang adil hanya dari kernel linux 3.14
Menurut POSIX.1-2008/SUSv4 Bagian XSI 2.9.7 ("Interaksi Thread dengan Operasi Berkas Biasa"):
Semua fungsi berikut harus atomik terhadap satu sama lain dalam efek yang ditentukan dalam POSIX.1-2008 saat mereka beroperasi pada file biasa atau tautan simbolik:...
Di antara API yang selanjutnya dicantumkan adalah write() dan writev(2). Anda di antara efek yang harus atomik di seluruh utas (dan proses) adalah pembaruan dari offset file. Namun, pada Linux sebelum versi 3.14, hal ini tidak terjadi:jika dua proses yang berbagi deskripsi file terbuka (lihat open(2)) melakukan write() (atau writev(2)) pada waktu yang sama, maka I/O operasi tidak atomik sehubungan dengan memperbarui file offset, dengan hasil bahwa blok keluaran data oleh dua proses mungkin (salah) tumpang tindih. Masalah ini telah diperbaiki di Linux 3.14.