我有两个进程,每个进程写大数据缓冲区,我想控制同步这些进程的写入到一个文件.
处理1写入缓冲器A包括(A1,A2,A3)和处理2写入缓冲器B,包括(B1,B2,B3).当我们使用write()系统调用将这些缓冲区写入磁盘到同一个文件(整个缓冲区一次:)时write(fd, A, sizeof(A)),文件架构如何?
我问这个是因为系统调用是原子的.如果我们写的数据缓冲区太大会发生什么.它是否像常规磁盘文件的管道?
如果您希望两个缓冲区的内容都存在,则必须打开O_APPEND设置了标志的文件。追加标志在写入之前查找文件末尾。如果没有这个设置,两个进程可能会指向文件的相同或重叠区域,并且最后写入的人将覆盖另一个进程写入的内容。
每次调用write都会写入所请求的字节数。如果您的进程被信号中断,那么您可能会以部分写入结束——返回实际写入的字节数。无论是否写入所有字节,您都将写入文件的一个连续部分。您没有得到您提到的第二种可能性的交错效果(例如A1,B1,A2,B2,...)。
如果您只得到部分写入,则如何进行取决于您。您可以继续写入(从缓冲区开始偏移先前写入的字节数),也可以放弃其余的写入。只有这样,才有可能获得交错的效果。
如果在另一个进程写入之前完成一个写入的内容很重要,那么您应该在尝试写入任何数据之前考虑锁定文件以进行独占写入访问(两个进程都必须检查)。