gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:22:11 25 4
gpt4 key购买 nike

我有以下代码:

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

非常感谢提前,

最佳答案

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com