首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件描述符轮询

文件描述符轮询
EN

Stack Overflow用户
提问于 2010-08-03 18:42:26
回答 2查看 6.3K关注 0票数 4

我已经创建了一个下面的程序,我希望在其中轮询我在程序中打开的文件的文件描述符。

代码语言:javascript
复制
#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文件)请帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-03 19:17:16

poll()实际上不能处理打开的文件。因为文件上的read()永远不会阻塞,所以poll()将始终返回您可以从文件中读取的非阻塞。

不过,这将(几乎)在字符设备*、命名管道**或套接字上工作,因为当您在没有可用的数据时使用read()时,这些设备会阻塞。(您还需要实际读取该数据,否则poll会一次又一次地告诉您数据是可用的)

要“轮询”正在增长/缩小的文件,请参阅man inotify或在循环中使用fstat()实现您自己的轮询。

*块设备是一个独立的故事;虽然从技术上讲,从硬盘读取可以阻塞10ms或更长时间,但在linux中,这并不被视为阻塞I/O。

**另请参阅how to flush a named pipe using bash

票数 7
EN

Stack Overflow用户

发布于 2010-08-04 00:11:03

不知道这是否是您的问题的原因(可能不是),但是重新定义标准宏FILE是一个特别糟糕的主意。你的编译器没有对此抱怨过吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3395732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档