2011-01-31 4 views
2

J'essaie d'enrouler ma tête autour de epoll sous Linux.
Le fonctionnement normal semble être:opérations de descripteur de fichier epoll

// Create the epoll_fd 
int epoll_fd = epoll_create(10); 

... 

// Add file descriptors to it 
struct epoll_event ev = {0}; 
ev.events |= EPOLLIN; 
ev.data.ptr = ...; 

/* for brevity, I don't do error checking here */ 
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, some_fd, &ev); 

... 

// Wait for IO events 
struct epoll_event events[10]; 
int num_events = epoll_wait(epoll_fd, events, 10, -1); 

// Now handle the events 
... 

Ma question est la suivante: compte tenu de la epoll_fd semble être un descripteur de fichier normal, sont-il d'autres opérations de fichiers que je peux faire avec elle, outre les trois fonctions epoll appels?

+3

Avant d'utiliser 'epoll' vous devriez vraiment vous demander * pourquoi * vous l'utilisez. C'est complètement non-standard et non-portable et n'a aucun avantage mesurable dans la grande majorité des endroits où les gens l'utilisent. Sauf si vous avez augmenté la limite de fichier ouvert de 1024 à quelque chose comme 50000 ou plus, tout ce que vous faites, c'est de rendre votre code non portable sans raison. –

Répondre

2

De l'man page:

Q3 est le descripteur epoll lui-même poll/epoll/select?

A3 Oui.

+0

Oui, mais qu'est-ce que ça fait? Que fait, par exemple, lire select() - sur ce descripteur de fichier? Que se passe-t-il si je lis d'elle? –

+0

Plus ou moins la même chose qui arrive quand vous epoll_wait, sauf que vous pouvez le faire sur plusieurs epoll fds à la fois. Mais vous ne voulez probablement qu'un FD d'epoll par thread de toute façon. – cdleonard

2

Vous pouvez poll(2) votre epoll_fd lui-même :)