我有以下代码:
#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身份运行代码。
非常感谢,
答案 0 :(得分:3)
Libevent旨在处理poll
或select
支持的相同文件描述符。这些系统调用不是为检查文件更改事件而设计的。它们被设计为在没有阻塞的情况下读取或写入文件描述符时返回,这对于常规文件来说是非常有意义的(对常规文件的读取和写入永远不会阻塞或总是阻塞,具体取决于您如何看待它) 。换句话说 - 除了套接字,管道和fifo:s之外的文件描述符上的libevent将不起作用。
还有其他机制可以检查文件是否已更改,但这些文件不可移植。