2011-11-07 100 views
4

我想写一个小型的C程序,当它正在被写入时从文件读取。有任何想法吗?从C中的文件中读取它的外部写入

+0

你对自己的要求有任何更多的细节?你准确读什么,它是如何修改的?您是否在寻找变化(任何地方),添加到最后的行或其他内容? – Thor84no

+0

这不是一个好主意。 IO子系统处理数据何时从输出缓冲区刷新并实际写入文件。除非您可以强制该程序清除其输出缓冲区(意思是说,您可以控制该程序的代码),否则您将得到非常“块状”的更新。如果你可以控制代码,那么有更好的方法可以在程序之间传递消息。 – jedwards

+0

这不是不可能的,但是如果你不告诉我们你有什么问题,我们无法真正帮助你。 –

回答

4

如果您可以控制写入过程,则应在读写器中使用mmap()MAP_SHARED。这样读者几乎可以立即看到作者所做的改变。

此外,请注意,Linux在打开文件时不会对文件中的数据进行快照,因此即使您只使用read()lseek(),也应该看到文件中所做的更改。

为了确定文件是否在Linux中被修改/打开/访问/ etc,您可以使用inotify API(请参阅inotify manpage)。这可以让您的流程等待您感兴趣的事件发生,直到它发生(而不是定期轮询)。您也可以使用epoll()或更传统的select()来实现类似的结果。

+0

你能分享/建议任何实际的例子吗? –