mirror of https://github.com/mkerrisk/man-pages
Added Q0/A0, making explicit that the key for items in an epoll
set is [file descriptor, open file description]
This commit is contained in:
parent
cf3eb59854
commit
7fb5cf0fb6
29
man7/epoll.7
29
man7/epoll.7
|
@ -18,7 +18,7 @@
|
||||||
.\"
|
.\"
|
||||||
.\" Davide Libenzi <davidel@xmailserver.org>
|
.\" Davide Libenzi <davidel@xmailserver.org>
|
||||||
.\"
|
.\"
|
||||||
.TH EPOLL 7 2008-02-26 "Linux" "Linux Programmer's Manual"
|
.TH EPOLL 7 2008-02-28 "Linux" "Linux Programmer's Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
epoll \- I/O event notification facility
|
epoll \- I/O event notification facility
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
@ -233,6 +233,15 @@ with
|
||||||
.BR EPOLL_CTL_MOD .
|
.BR EPOLL_CTL_MOD .
|
||||||
.SS Questions and Answers
|
.SS Questions and Answers
|
||||||
.TP 4
|
.TP 4
|
||||||
|
.B Q0
|
||||||
|
What is the key used to distinguish the file descriptors in an epoll set?
|
||||||
|
.TP
|
||||||
|
.B A0
|
||||||
|
The key is the combination of the file descriptor number and
|
||||||
|
the open file description
|
||||||
|
(also known as "open file handle",
|
||||||
|
the kernel's internal representation of an open file).
|
||||||
|
.TP
|
||||||
.B Q1
|
.B Q1
|
||||||
What happens if you add the same file descriptor to an epoll set twice?
|
What happens if you add the same file descriptor to an epoll set twice?
|
||||||
.TP
|
.TP
|
||||||
|
@ -243,11 +252,25 @@ However, it is possible to add a duplicate
|
||||||
.RB ( dup (2),
|
.RB ( dup (2),
|
||||||
.BR dup2 (2),
|
.BR dup2 (2),
|
||||||
.BR fcntl (2)
|
.BR fcntl (2)
|
||||||
.BR F_DUPFD ,
|
.BR F_DUPFD )
|
||||||
.BR fork (2))
|
|
||||||
descriptor to the same
|
descriptor to the same
|
||||||
.B epoll
|
.B epoll
|
||||||
set.
|
set.
|
||||||
|
.\" But a descriptor duplicated by fork(2) can't be added to the
|
||||||
|
.\" set, which is an ugly inconsistency. On the one hand, a child process
|
||||||
|
.\" cannot add the duplicate file descriptor to the epoll set. (In every
|
||||||
|
.\" other case that I can think of, descriptors duplicated by fork have
|
||||||
|
.\" similar semantics to descriptors duplicated by dup() and friends.) On
|
||||||
|
.\" the other hand, the very fact that the child has a duplicate of the
|
||||||
|
.\" descriptor means that even if the parent closes its descriptor, then
|
||||||
|
.\" epoll_wait() in the parent will continue to receive notifications for
|
||||||
|
.\" that descriptor because of the duplicated descriptor in the child.
|
||||||
|
.\"
|
||||||
|
.\" The choice of [file *, fd] as the key for epoll sets really does seem
|
||||||
|
.\" unfortunate. Keying on [pid, fd] would probably have given saner
|
||||||
|
.\" semantics. Obviously it can't be changed now though.
|
||||||
|
.\"
|
||||||
|
.\" mtk, Feb 2008
|
||||||
This can be a useful technique for filtering events,
|
This can be a useful technique for filtering events,
|
||||||
if the duplicate file descriptors are registered with different
|
if the duplicate file descriptors are registered with different
|
||||||
.I events
|
.I events
|
||||||
|
|
Loading…
Reference in New Issue