我需要编写一个应用程序,以非常快的速度将日志条目吐出到常规文件中。此外,还有另一个进程,可以同时读取同一个文件,其他进程将写入它。 我有以下问题
read()如何确定EOF,特别是在可以同时修改基础文件的情况下?
read()是否可以从其他进程写入返回部分写入的数据?例如,写入过程写了半行,读取将选择该半行并返回?
应用程序将使用Ex4文件系统
在Linux 2.6.x上用C语言编写更新: 下面的链接指向修补程序,它在读取和写入之前锁定EXT4中的inode。 http://patchwork.ozlabs.org/patch/91834/
答案 0 :(得分:4)
read()如何确定EOF,特别是在可以同时修改底层文件的情况下?
当您尝试read()
超过文件末尾时,它会返回EOF
。您仍然可以向后和向前搜索文件并再次读取(仅当文件描述符引用文件时,而不是管道或套接字)。
read()是否可以从其他进程写入返回部分写入的数据?例如,写入过程写了半行,读取将选择该半行并返回?
很可能。