2011-04-09 21 views
3
1 #include <sys/epoll.h> 
    2 #include <stdio.h> 
    3 #include <sys/types.h> 
    4 #include <sys/stat.h> 
    5 #include <fcntl.h> 
    6 #include <string.h> 
    7 #include <sys/uio.h> 
    8 
    9 int main() { 
10 struct epoll_event event ; 
11 int ret,fd, epfd ; 
12 
13 fd = open("doc", O_RDONLY); 
14 if(fd < 0) 
15  perror("open"); 
16 
17 event.data.fd = fd ; 
18 event.events = EPOLLIN|EPOLLOUT ; 
19 
20 epfd = epoll_create(50); 
21 printf("%d", epfd); 
22 
23 if(epfd < 0) 
24  perror("epoll_create"); 
25 
26 ret = epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event) ; 
27 if(ret < 0) 
28  perror("epoll_ctl"); 
29 
30 } 

编译此代码时,没有错误。 的gcc -o epoll的epoo.cepoll_ctl:操作不允许错误 - c程序

但是当我试图执行程序 'epoll的',我得到了错误信息

epoll_ctl:不允许操作。

我试图将'doc'文件的模式更改为0777,但它不起作用。

什么问题?谢谢:)

回答

7

epoll_ctl(2)

EPERM The target file fd does not support epoll. 

我要去猜测doc是一个普通文件。常规文件是总是准备好read(2)write(2)操作,因此它对于常规文件上的epoll(7)select(2)没有任何意义。

如果doc是一个管道或unix域套接字,在这里留言(所以我知道要删除我的帖子)并修改您的问题,以便其他人不会犯同样的错误。 :)

+0

你是对的! Doc是常规文件。我是编程的新手,所以你的回答对我很有帮助。谢谢 :) – webnoon 2011-04-09 08:30:01

1

在这种情况下,您正在打开一个常规文件。 epoll(),select()poll()对常规文件没有意义。

如果是管道或插座,然后:

$mkfifo doc 
相关问题