在外部写入文件时从C中读取文件

在外部写入文件时从C中读取文件,c,linux,io,C,Linux,Io,我想写一个小的C程序,在文件被主动写入时从文件中读取。有什么想法吗?如果你能控制写作过程,你应该在读卡器和写卡器中使用mmap()和MAP\u共享。这样,读者将立即看到作者所做的更改 另外,请注意,当您打开文件时,Linux不会对文件中的数据进行任何快照,因此即使只使用read()和lseek(),您也应该看到文件中正在进行的更改 为了确定文件是否在Linux中被修改/打开/访问/etc,您可以使用inotifyAPI(请参见inotify)。这允许您让流程等待您感兴趣的事件发生(而不是定期轮询

我想写一个小的C程序,在文件被主动写入时从文件中读取。有什么想法吗?

如果你能控制写作过程,你应该在读卡器和写卡器中使用
mmap()
MAP\u共享。这样,读者将立即看到作者所做的更改

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


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

我认为
tail-f
正是您想要的,不是吗?请看一下源代码:


或者这个(不确定是否更新):

关于您的需求,您有更多的细节吗?你到底在读什么?它是如何修改的?你是在寻找变化(在任何地方),在结尾添加行,还是其他什么?这不是一个好主意。IO子系统处理从输出缓冲区刷新数据并实际写入文件的时间。除非您可以强制该程序刷新其输出缓冲区(也就是说,您可以控制该程序的代码),否则您将得到非常“块状”的更新。如果你能控制代码,就有更好的方法在程序之间传递消息。这不是不可能的,但如果你不告诉我们你有什么问题,我们真的帮不了你。如果你能避免的话,这根本不是一个好主意。不幸的是,我不是专家,所以如果我完全错了,你们必须原谅我。我正在尝试将usb键盘的输出发送到进程。我想,也许从“/dev/input/by id/usb-”读取数据会给我想要的输入。如果我使用scanf,我将从标准输入中读取我不想读取的内容。只需读取usb设备的输入。你能分享/建议任何实用的例子吗?