Answers:
迟到总比不到好 :)
快速答案是:“ 2,147,479,552字节,如果内核版本为3.14或更高版本”
详细答案:
据我了解,这是关于写syscall的:
http://man7.org/linux/man-pages/man2/write.2.html
1)任何POSIX系统(linux,bsd,所有unix)都保证能够写入最大MAX_SSIZE字节
根据POSIX.1,如果count大于SSIZE_MAX,则结果是实现定义的;有关Linux上的上限,请参见注释。
# getconf SSIZE_MAX
32767
2)保证Linux最多可以写入1.99 GiB(这是3.14和更高版本的Linux内核的原子操作)
在Linux上,write()(和类似的系统调用)将最多传输0x7ffff000(2,147,479,552)字节,并返回实际传输的字节数。(在32位和64位系统上都是如此。)
但这仅在linux内核3.14上是公平的原子操作
根据POSIX.1-2008 / SUSv4第XSI 2.9.7节(“与常规文件操作的线程交互”):
当对常规文件或符号链接进行操作时,以下所有功能在POSIX.1-2008中指定的效果中,彼此之间应是原子的:...
随后列出的API中有write()和writev(2)。在线程(和进程)之间应该是原子性的影响包括文件偏移量的更新。但是,在版本3.14之前的Linux上不是这样:如果两个共享一个打开文件描述的进程(请参阅open(2))同时执行一次write()(或writev(2)),则I / O操作不是更新文件偏移量的原子操作,其结果是两个进程输出的数据块可能(不正确)重叠。此问题已在Linux 3.14中修复。
这个超级用户答案对原子写大小是一个很好的定义。
这至少与硬件扇区的大小(原子读/写大小)一样大。