Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

epoll_ctl : Operation not permitted error - c program

Tags:

c

file

linux

io

epoll

  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 }

When compiling this code, there was no errors. gcc -o epoll epoo.c

but when i tried to execute the program 'epoll', i got the error message

epoll_ctl:Operation not permitted.

I've tried to change the 'doc' file's mode to 0777 but it was not work.

What is the problem? Thank you :)

like image 579
webnoon Avatar asked Dec 22 '22 15:12

webnoon


2 Answers

From epoll_ctl(2):

   EPERM  The target file fd does not support epoll.

I'm going to guess that doc is a regular file. Regular files are always ready for read(2) or write(2) operations, thus it doesn't make sense to epoll(7) or select(2) on regular files.

If doc is a pipe or unix domain socket, comment here (so I know to delete my post) and amend your question so others don't make the same mistake I did. :)

like image 131
sarnold Avatar answered Dec 24 '22 03:12

sarnold


In this case you're opening a regular file. epoll(), select(), and poll() don't make sense on regular files.

If it is a pipe or socket, then:

$mkfifo doc
like image 22
user2369033 Avatar answered Dec 24 '22 05:12

user2369033