我已经创建了一个下面的程序,我希望在其中轮询我在程序中打开的文件的文件描述符。
#define FILE "help"
int main()
{
int ret1;
struct pollfd fds[1];
ret1 = open(FILE, O_CREAT);
fds[0].fd = ret1;
fds[0].events = POLLIN;
while(1)
{
poll(fds,1,-1);
if (fds[0].revents & POLLIN)
printf("POLLING");
}
return 0;
}它在无限循环中运行。当文件发生某些操作时,我希望运行循环。(这是一个ASCII文件)请帮助
发布于 2010-08-03 19:17:16
poll()实际上不能处理打开的文件。因为文件上的read()永远不会阻塞,所以poll()将始终返回您可以从文件中读取的非阻塞。
不过,这将(几乎)在字符设备*、命名管道**或套接字上工作,因为当您在没有可用的数据时使用read()时,这些设备会阻塞。(您还需要实际读取该数据,否则poll会一次又一次地告诉您数据是可用的)
要“轮询”正在增长/缩小的文件,请参阅man inotify或在循环中使用fstat()实现您自己的轮询。
*块设备是一个独立的故事;虽然从技术上讲,从硬盘读取可以阻塞10ms或更长时间,但在linux中,这并不被视为阻塞I/O。
发布于 2010-08-04 00:11:03
不知道这是否是您的问题的原因(可能不是),但是重新定义标准宏FILE是一个特别糟糕的主意。你的编译器没有对此抱怨过吗?
https://stackoverflow.com/questions/3395732
复制相似问题