我想写一个小C程序,它在文件被主动写入时从文件中读取。有什么想法吗?
答案 0 :(得分:4)
如果您可以控制编写过程,则应在阅读器和编写器中使用mmap()
和MAP_SHARED
。通过这种方式,读者可以立即看到作者所做的更改。
另外,请注意,当您打开文件时,Linux不会对文件中的数据进行任何快照,因此即使您只使用read()
和{{}},您也应该看到文件中正在进行的更改。 {1}}。
为了确定Linux中是否修改/打开/访问/等文件,您可以使用lseek()
API(请参阅inotify manpage)。这允许您使您的进程等待您感兴趣的事件直到它发生(而不是定期轮询)。您还可以使用inotify
或更传统的epoll()
来完成类似的结果。
答案 1 :(得分:2)
我认为tail -f
正是你想要的,不是吗?看一下源代码:
http://www.gnu.org/s/coreutils/
或者这个(不确定是否更新):http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c