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

标签 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(...)。

问题是,“changed”永远不会被打印!

我以 root 身份运行代码。

提前非常感谢,

最佳答案

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

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

关于c - libevent:在文件更改时引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586745/

相关文章:

c - 为什么使用gcc返回局部变量地址时得不到警告信息?

javascript - 如何继承EventTarget对象?

Objective-C:如何为异步方法正确使用内存管理

java - Play Framework 2.4.x 在回调函数中执行保存操作

events - 模拟 subview 模型与父 View 模型交互的方法?

python - 如何在特定时间之间以固定间隔在 python 中运行任务?

c - int * 与 char * 初始化

c++ - 使用 libevent 或 boost::asio 在单线程中建立多个 tcp 连接。这是可能的?

将 off_t 转换为 int

javascript - 当我在呈现 View 后设置输入类型的值时,为什么不触发输入类型的更改事件?