单独的
write()调用是分开处理的,而不是作为单个原子写入事务处理的,并且当多个进程/线程正在向同一个文件写入时,交织是完全可能的。实际写入的顺序由调度程序(两个内核进程调度程序,对于“绿色”线程,则由线程库的调度程序)确定。
除非您另外指定(
O_DIRECT
open标志或类似内容,如果支持),
read()并且
write()对内核缓冲区进行操作,并且
read()将优先使用已加载的缓冲区来优先读取磁盘。
请注意,这可能会由于本地文件缓冲而变得复杂;例如,
stdio并且
iostreams将读取由块的文件数据到在该过程是独立内核缓冲区的缓冲器,所以一个
write()从别处到在已经缓冲的数据
stdio将不被看到。同样,在使用输出缓冲之前,在刷新输出缓冲区之前,不会自动有任何实际的内核级输出,要么是因为它已满,要么是自动填充的,或者是由于
fflush()C
++
endl(隐式刷新输出缓冲区)而手动进行的。



