【发布时间】:2012-11-16 20:12:11
【问题描述】:
我需要编写一个以非常快的速度将日志条目吐出到常规文件的应用程序。此外,还有另一个进程可以同时读取同一个文件,其他进程将写入它。 我有以下问题
read() 如何确定 EOF,特别是在底层文件可能同时被修改的情况下?
read() 是否可以从其他进程写入返回部分写入的数据?例如,写过程写了半行,读会选择那半行并返回?
应用程序将使用 Ex4 文件系统在 linux 2.6.x 上用 C 语言编写
更新: 下面的链接指向在读写之前将 inode 锁定在 EXT4 中的补丁。 http://patchwork.ozlabs.org/patch/91834/
【问题讨论】:
-
我认为这是著名读者作家的问题,最好使用
lock或semaphore实现它 -
ad 2) 在 unix 中,读取和写入是原子的(至少到块级)。对于大于1块的action,我不知道文件系统是否保证了操作的顺序。
-
@wildplasser 你能指点我一些文档,上面写到一个块级别是原子的吗?
-
@wildplasser 没有这样的保证,但它在 99% 的时间里都有效,因为
write()系统调用锁定了它即将写入的 inode,因此序列化了所有写入器。在 1% 的情况下,它将是部分write()。