libevent:在文件更改时引发事件
Posted
技术标签:
【中文标题】libevent:在文件更改时引发事件【英文标题】:libevent: raise event on file change 【发布时间】:2012-11-27 14:46:36 【问题描述】:我有以下代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <event.h>
void fd_cb(int fd,short event,void *arg)
printf("changed\n");
int main(int argc, const char* argv[])
struct event eoh_ev;
FILE *fp;
int fd;
fp=fopen("/var/log/syslog","rw");
fd=fileno(fp);
event_init();
event_set(&eoh_ev,fd,EV_READ|EV_WRITE,fd_cb,NULL);
event_add(&eoh_ev,NULL);
event_dispatch();
return 0;
如您所见,当有内容写入 /var/log/syslog 时,我尝试调用 fd_cb(...)。
问题是,“更改”永远不会被打印出来!
我正在以 root 身份运行代码。
非常感谢,
【问题讨论】:
您可能希望使用inotify
来接收来自文件更改的事件。
【参考方案1】:
Libevent 旨在处理poll
或select
支持的相同文件描述符。这些系统调用并非旨在检查文件更改事件。它们旨在在文件描述符可以在不阻塞的情况下读取或写入时返回,这对常规文件没有多大意义(对常规文件的读取和写入永远不会阻塞或总是会阻塞,这取决于您如何看待它) .换句话说 - 除了套接字、管道和 fifo:s 之外的文件描述符上的 libevent 将不起作用。
还有其他机制可以检查文件是否已更改,但这些机制不可移植。
【讨论】:
好的,很酷。感谢你的回答。我实际上是在尝试监视“/sys/class/gpio/gpio4/value”以上是关于libevent:在文件更改时引发事件的主要内容,如果未能解决你的问题,请参考以下文章