libevent:在文件更改时引发事件

时间:2012-11-27 14:46:37

标签: c events asynchronous libevent

我有以下代码:

#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身份运行代码。

非常感谢,

1 个答案:

答案 0 :(得分:3)

Libevent旨在处理pollselect支持的相同文件描述符。这些系统调用不是为检查文件更改事件而设计的。它们被设计为在没有阻塞的情况下读取或写入文件描述符时返回,这对于常规文件来说是非常有意义的(对常规文件的读取和写入永远不会阻塞或总是阻塞,具体取决于您如何看待它) 。换句话说 - 除了套接字,管道和fifo:s之外的文件描述符上的libevent将不起作用。

还有其他机制可以检查文件是否已更改,但这些文件不可移植。