2

我有以下代码:

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

提前谢谢了,

4

1 回答 1

3

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

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

于 2012-11-27T15:04:47.933 回答