# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2012-03-22 04:25+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH #: build/C/man7/epoll.7:21 #, no-wrap msgid "EPOLL" msgstr "" #. type: TH #: build/C/man7/epoll.7:21 #, no-wrap msgid "2009-02-01" msgstr "" #. type: TH #: build/C/man7/epoll.7:21 build/C/man2/epoll_create.2:25 build/C/man2/epoll_ctl.2:21 build/C/man2/epoll_wait.2:23 build/C/man2/poll.2:31 #, no-wrap msgid "Linux" msgstr "" #. type: TH #: build/C/man7/epoll.7:21 build/C/man2/epoll_create.2:25 build/C/man2/epoll_ctl.2:21 build/C/man2/epoll_wait.2:23 build/C/man2/poll.2:31 #, no-wrap msgid "Linux Programmer's Manual" msgstr "" #. type: SH #: build/C/man7/epoll.7:22 build/C/man2/epoll_create.2:26 build/C/man2/epoll_ctl.2:22 build/C/man2/epoll_wait.2:24 build/C/man2/poll.2:32 #, no-wrap msgid "NAME" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:24 msgid "epoll - I/O event notification facility" msgstr "" #. type: SH #: build/C/man7/epoll.7:24 build/C/man2/epoll_create.2:28 build/C/man2/epoll_ctl.2:24 build/C/man2/epoll_wait.2:26 build/C/man2/poll.2:34 #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:26 build/C/man2/epoll_ctl.2:26 msgid "B<#include Esys/epoll.hE>" msgstr "" #. type: SH #: build/C/man7/epoll.7:26 build/C/man2/epoll_create.2:35 build/C/man2/epoll_ctl.2:29 build/C/man2/epoll_wait.2:36 build/C/man2/poll.2:46 #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:36 msgid "" "B is a variant of B(2) that can be used either as an " "edge-triggered or a level-triggered interface and scales well to large " "numbers of watched file descriptors. The following system calls are " "provided to create and manage an B instance:" msgstr "" #. type: IP #: build/C/man7/epoll.7:36 build/C/man7/epoll.7:46 build/C/man7/epoll.7:54 #, no-wrap msgid "*" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:46 msgid "" "An B instance created by B(2), which returns a file " "descriptor referring to the epoll instance. (The more recent " "B(2) extends the functionality of B(2).)" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:54 msgid "" "Interest in particular file descriptors is then registered via " "B(2). The set of file descriptors currently registered on an " "B instance is sometimes called an I set." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:57 msgid "Finally, the actual wait is started by B(2)." msgstr "" #. type: SS #: build/C/man7/epoll.7:57 #, no-wrap msgid "Level-Triggered and Edge-Triggered" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:66 msgid "" "The B event distribution interface is able to behave both as " "edge-triggered (ET) and as level-triggered (LT). The difference between the " "two mechanisms can be described as follows. Suppose that this scenario " "happens:" msgstr "" #. type: IP #: build/C/man7/epoll.7:66 #, no-wrap msgid "1." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:72 msgid "" "The file descriptor that represents the read side of a pipe (I) is " "registered on the B instance." msgstr "" #. type: IP #: build/C/man7/epoll.7:72 #, no-wrap msgid "2." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:74 msgid "A pipe writer writes 2 kB of data on the write side of the pipe." msgstr "" #. type: IP #: build/C/man7/epoll.7:74 #, no-wrap msgid "3." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:80 msgid "" "A call to B(2) is done that will return I as a ready file " "descriptor." msgstr "" #. type: IP #: build/C/man7/epoll.7:80 #, no-wrap msgid "4." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:83 msgid "The pipe reader reads 1 kB of data from I." msgstr "" #. type: IP #: build/C/man7/epoll.7:83 #, no-wrap msgid "5." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:87 msgid "A call to B(2) is done." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:122 msgid "" "If the I file descriptor has been added to the B interface using " "the B (edge-triggered) flag, the call to B(2) done in " "step B<5> will probably hang despite the available data still present in the " "file input buffer; meanwhile the remote peer might be expecting a response " "based on the data it already sent. The reason for this is that " "edge-triggered mode only delivers events when changes occur on the monitored " "file descriptor. So, in step B<5> the caller might end up waiting for some " "data that is already present inside the input buffer. In the above example, " "an event on I will be generated because of the write done in B<2> and " "the event is consumed in B<3>. Since the read operation done in B<4> does " "not consume the whole buffer data, the call to B(2) done in " "step B<5> might block indefinitely." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:132 msgid "" "An application that employs the B flag should use nonblocking file " "descriptors to avoid having a blocking read or write starve a task that is " "handling multiple file descriptors. The suggested way to use B as an " "edge-triggered (B) interface is as follows:" msgstr "" #. type: TP #: build/C/man7/epoll.7:133 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:136 msgid "with nonblocking file descriptors; and" msgstr "" #. type: TP #: build/C/man7/epoll.7:136 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:144 msgid "" "by waiting for an event only after B(2) or B(2) return " "B." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:155 msgid "" "By contrast, when used as a level-triggered interface (the default, when " "B is not specified), B is simply a faster B(2), and " "can be used wherever the latter is used since it shares the same semantics." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:172 msgid "" "Since even with edge-triggered B, multiple events can be generated " "upon receipt of multiple chunks of data, the caller has the option to " "specify the B flag, to tell B to disable the associated " "file descriptor after the receipt of an event with B(2). When " "the B flag is specified, it is the caller's responsibility to " "rearm the file descriptor using B(2) with B." msgstr "" #. type: SS #: build/C/man7/epoll.7:172 #, no-wrap msgid "/proc interfaces" msgstr "" #. Following was added in 2.6.28, but them removed in 2.6.29 #. .TP #. .IR /proc/sys/fs/epoll/max_user_instances " (since Linux 2.6.28)" #. This specifies an upper limit on the number of epoll instances #. that can be created per real user ID. #. type: Plain text #: build/C/man7/epoll.7:180 msgid "" "The following interfaces can be used to limit the amount of kernel memory " "consumed by epoll:" msgstr "" #. type: TP #: build/C/man7/epoll.7:180 #, no-wrap msgid "I (since Linux 2.6.28)" msgstr "" #. 2.6.29 (in 2.6.28, the default was 1/32 of lowmem) #. type: Plain text #: build/C/man7/epoll.7:194 msgid "" "This specifies a limit on the total number of file descriptors that a user " "can register across all epoll instances on the system. The limit is per " "real user ID. Each registered file descriptor costs roughly 90 bytes on a " "32-bit kernel, and roughly 160 bytes on a 64-bit kernel. Currently, the " "default value for I is 1/25 (4%) of the available low " "memory, divided by the registration cost in bytes." msgstr "" #. type: SS #: build/C/man7/epoll.7:194 #, no-wrap msgid "Example for Suggested Usage" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:223 msgid "" "While the usage of B when employed as a level-triggered interface " "does have the same semantics as B(2), the edge-triggered usage " "requires more clarification to avoid stalls in the application event loop. " "In this example, listener is a nonblocking socket on which B(2) has " "been called. The function I uses the new ready file descriptor " "until B is returned by either B(2) or B(2). An " "event-driven state machine application should, after having received " "B, record its current state so that at the next call to " "I it will continue to B(2) or B(2) from where it " "stopped before." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:229 #, no-wrap msgid "" "#define MAX_EVENTS 10\n" "struct epoll_event ev, events[MAX_EVENTS];\n" "int listen_sock, conn_sock, nfds, epollfd;\n" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:232 #, no-wrap msgid "" "/* Set up listening socket, \\(aqlisten_sock\\(aq (socket(),\n" " bind(), listen()) */\n" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:238 #, no-wrap msgid "" "epollfd = epoll_create(10);\n" "if (epollfd == -1) {\n" " perror(\"epoll_create\");\n" " exit(EXIT_FAILURE);\n" "}\n" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:245 #, no-wrap msgid "" "ev.events = EPOLLIN;\n" "ev.data.fd = listen_sock;\n" "if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == -1) {\n" " perror(\"epoll_ctl: listen_sock\");\n" " exit(EXIT_FAILURE);\n" "}\n" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:252 #, no-wrap msgid "" "for (;;) {\n" " nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);\n" " if (nfds == -1) {\n" " perror(\"epoll_pwait\");\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:274 #, no-wrap msgid "" " for (n = 0; n E nfds; ++n) {\n" " if (events[n].data.fd == listen_sock) {\n" " conn_sock = accept(listen_sock,\n" " (struct sockaddr *) &local, &addrlen);\n" " if (conn_sock == -1) {\n" " perror(\"accept\");\n" " exit(EXIT_FAILURE);\n" " }\n" " setnonblocking(conn_sock);\n" " ev.events = EPOLLIN | EPOLLET;\n" " ev.data.fd = conn_sock;\n" " if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,\n" " &ev) == -1) {\n" " perror(\"epoll_ctl: conn_sock\");\n" " exit(EXIT_FAILURE);\n" " }\n" " } else {\n" " do_use_fd(events[n].data.fd);\n" " }\n" " }\n" "}\n" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:293 msgid "" "When used as an edge-triggered interface, for performance reasons, it is " "possible to add the file descriptor inside the B interface " "(B) once by specifying (B|B). This " "allows you to avoid continuously switching between B and " "B calling B(2) with B." msgstr "" #. type: SS #: build/C/man7/epoll.7:293 #, no-wrap msgid "Questions and Answers" msgstr "" #. type: TP #: build/C/man7/epoll.7:294 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:299 msgid "" "What is the key used to distinguish the file descriptors registered in an " "B set?" msgstr "" #. type: TP #: build/C/man7/epoll.7:299 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:305 msgid "" "The key is the combination of the file descriptor number and the open file " "description (also known as an \"open file handle\", the kernel's internal " "representation of an open file)." msgstr "" #. type: TP #: build/C/man7/epoll.7:305 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:310 msgid "" "What happens if you register the same file descriptor on an B " "instance twice?" msgstr "" #. type: TP #: build/C/man7/epoll.7:310 #, no-wrap msgid "B" msgstr "" #. But a descriptor duplicated by fork(2) can't be added to the #. set, because the [file *, fd] pair is already in the epoll set. #. That is a somewhat 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. # #. See http://thread.gmane.org/gmane.linux.kernel/596462/ #. "epoll design problems with common fork/exec patterns" # #. mtk, Feb 2008 #. type: Plain text #: build/C/man7/epoll.7:341 msgid "" "You will probably get B. However, it is possible to add a duplicate " "(B(2), B(2), B(2) B) descriptor to the same " "B instance. This can be a useful technique for filtering events, if " "the duplicate file descriptors are registered with different I " "masks." msgstr "" #. type: TP #: build/C/man7/epoll.7:341 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:349 msgid "" "Can two B instances wait for the same file descriptor? If so, are " "events reported to both B file descriptors?" msgstr "" #. type: TP #: build/C/man7/epoll.7:349 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:353 msgid "" "Yes, and events would be reported to both. However, careful programming may " "be needed to do this correctly." msgstr "" #. type: TP #: build/C/man7/epoll.7:353 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:358 msgid "Is the B file descriptor itself poll/epoll/selectable?" msgstr "" #. type: TP #: build/C/man7/epoll.7:358 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:365 msgid "" "Yes. If an B file descriptor has events waiting then it will " "indicate as being readable." msgstr "" #. type: TP #: build/C/man7/epoll.7:365 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:370 msgid "" "What happens if one attempts to put an B file descriptor into its own " "file descriptor set?" msgstr "" #. type: TP #: build/C/man7/epoll.7:370 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:381 msgid "" "The B(2) call will fail (B). However, you can add an " "B file descriptor inside another B file descriptor set." msgstr "" #. type: TP #: build/C/man7/epoll.7:381 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:386 msgid "" "Can I send an B file descriptor over a UNIX domain socket to another " "process?" msgstr "" #. type: TP #: build/C/man7/epoll.7:386 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:392 msgid "" "Yes, but it does not make sense to do this, since the receiving process " "would not have copies of the file descriptors in the B set." msgstr "" #. type: TP #: build/C/man7/epoll.7:392 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:397 msgid "" "Will closing a file descriptor cause it to be removed from all B sets " "automatically?" msgstr "" #. type: TP #: build/C/man7/epoll.7:397 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:425 msgid "" "Yes, but be aware of the following point. A file descriptor is a reference " "to an open file description (see B(2)). Whenever a descriptor is " "duplicated via B(2), B(2), B(2) B, or " "B(2), a new file descriptor referring to the same open file " "description is created. An open file description continues to exist until " "all file descriptors referring to it have been closed. A file descriptor is " "removed from an B set only after all the file descriptors referring " "to the underlying open file description have been closed (or before if the " "descriptor is explicitly removed using B(2) B). " "This means that even after a file descriptor that is part of an B set " "has been closed, events may be reported for that file descriptor if other " "file descriptors referring to the same underlying file description remain " "open." msgstr "" #. type: TP #: build/C/man7/epoll.7:425 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:430 msgid "" "If more than one event occurs between B(2) calls, are they " "combined or reported separately?" msgstr "" #. type: TP #: build/C/man7/epoll.7:430 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:433 msgid "They will be combined." msgstr "" #. type: TP #: build/C/man7/epoll.7:433 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:437 msgid "" "Does an operation on a file descriptor affect the already collected but not " "yet reported events?" msgstr "" #. type: TP #: build/C/man7/epoll.7:437 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:443 msgid "" "You can do two operations on an existing file descriptor. Remove would be " "meaningless for this case. Modify will reread available I/O." msgstr "" #. type: TP #: build/C/man7/epoll.7:443 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:451 msgid "" "Do I need to continuously read/write a file descriptor until B when " "using the B flag (edge-triggered behavior) ?" msgstr "" #. type: TP #: build/C/man7/epoll.7:451 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:461 msgid "" "Receiving an event from B(2) should suggest to you that such " "file descriptor is ready for the requested I/O operation. You must consider " "it ready until the next (nonblocking) read/write yields B. When " "and how you will use the file descriptor is entirely up to you." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:467 msgid "" "For packet/token-oriented files (e.g., datagram socket, terminal in " "canonical mode), the only way to detect the end of the read/write I/O space " "is to continue to read/write until B." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:483 msgid "" "For stream-oriented files (e.g., pipe, FIFO, stream socket), the condition " "that the read/write I/O space is exhausted can also be detected by checking " "the amount of data read from / written to the target file descriptor. For " "example, if you call B(2) by asking to read a certain amount of data " "and B(2) returns a lower number of bytes, you can be sure of having " "exhausted the read I/O space for the file descriptor. The same is true when " "writing using B(2). (Avoid this latter technique if you cannot " "guarantee that the monitored file descriptor always refers to a " "stream-oriented file.)" msgstr "" #. type: SS #: build/C/man7/epoll.7:483 #, no-wrap msgid "Possible Pitfalls and Ways to Avoid Them" msgstr "" #. type: TP #: build/C/man7/epoll.7:484 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:492 msgid "" "If there is a large amount of I/O space, it is possible that by trying to " "drain it the other files will not get processed causing starvation. (This " "problem is not specific to B.)" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:500 msgid "" "The solution is to maintain a ready list and mark the file descriptor as " "ready in its associated data structure, thereby allowing the application to " "remember which files need to be processed but still round robin amongst all " "the ready files. This also supports ignoring subsequent events you receive " "for file descriptors that are already ready." msgstr "" #. type: TP #: build/C/man7/epoll.7:500 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:516 msgid "" "If you use an event cache or store all the file descriptors returned from " "B(2), then make sure to provide a way to mark its closure " "dynamically (i.e., caused by a previous event's processing). Suppose you " "receive 100 events from B(2), and in event #47 a condition " "causes event #13 to be closed. If you remove the structure and B(2) " "the file descriptor for event #13, then your event cache might still say " "there are events waiting for that file descriptor causing confusion." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:527 msgid "" "One solution for this is to call, during the processing of event 47, " "B(B) to delete file descriptor 13 and " "B(2), then mark its associated data structure as removed and link it " "to a cleanup list. If you find another event for file descriptor 13 in your " "batch processing, you will discover the file descriptor had been previously " "removed and there will be no confusion." msgstr "" #. type: SH #: build/C/man7/epoll.7:527 build/C/man2/epoll_create.2:114 build/C/man2/epoll_ctl.2:224 build/C/man2/epoll_wait.2:174 build/C/man2/poll.2:286 #, no-wrap msgid "VERSIONS" msgstr "" #. Its interface should be finalized in Linux kernel 2.5.66. #. type: Plain text #: build/C/man7/epoll.7:533 msgid "" "The B API was introduced in Linux kernel 2.5.44. Support was added " "to glibc in version 2.3.2." msgstr "" #. type: SH #: build/C/man7/epoll.7:533 build/C/man2/epoll_create.2:124 build/C/man2/epoll_ctl.2:229 build/C/man2/epoll_wait.2:184 build/C/man2/poll.2:306 #, no-wrap msgid "CONFORMING TO" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:542 msgid "" "The B API is Linux-specific. Some other systems provide similar " "mechanisms, for example, FreeBSD has I, and Solaris has " "I." msgstr "" #. type: SH #: build/C/man7/epoll.7:542 build/C/man2/epoll_create.2:133 build/C/man2/epoll_ctl.2:252 build/C/man2/epoll_wait.2:187 build/C/man2/poll.2:338 #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:547 msgid "B(2), B(2), B(2), B(2)" msgstr "" #. type: SH #: build/C/man7/epoll.7:547 build/C/man2/epoll_create.2:138 build/C/man2/epoll_ctl.2:257 build/C/man2/epoll_wait.2:191 build/C/man2/poll.2:342 #, no-wrap msgid "COLOPHON" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:554 build/C/man2/epoll_create.2:145 build/C/man2/epoll_ctl.2:264 build/C/man2/epoll_wait.2:198 build/C/man2/poll.2:349 msgid "" "This page is part of release 3.37 of the Linux I project. A " "description of the project, and information about reporting bugs, can be " "found at http://www.kernel.org/doc/man-pages/." msgstr "" #. type: TH #: build/C/man2/epoll_create.2:25 #, no-wrap msgid "EPOLL_CREATE" msgstr "" #. type: TH #: build/C/man2/epoll_create.2:25 build/C/man2/epoll_ctl.2:21 build/C/man2/epoll_wait.2:23 #, no-wrap msgid "2010-12-03" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:28 msgid "epoll_create, epoll_create1 - open an epoll file descriptor" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:31 build/C/man2/epoll_wait.2:29 #, no-wrap msgid "B<#include Esys/epoll.hE>\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:34 #, no-wrap msgid "" "BIB<);>\n" "BIB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:48 msgid "" "B() creates an epoll \"instance\", requesting the kernel to " "allocate an event backing store dimensioned for I descriptors. The " "I is not the maximum size of the backing store but just a hint to the " "kernel about how to dimension internal structures. (Nowadays, I is " "unused; see NOTES below.)" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:61 msgid "" "B() returns a file descriptor referring to the new epoll " "instance. This file descriptor is used for all the subsequent calls to the " "B interface. When no longer required, the file descriptor returned " "by B() should be closed by using B(2). When all file " "descriptors referring to an epoll instance have been closed, the kernel " "destroys the instance and releases the associated resources for reuse." msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:73 msgid "" "If I is 0, then, other than the fact that the obsolete I " "argument is dropped, B() is the same as B(). " "The following value can be included in I to obtain different " "behavior:" msgstr "" #. type: TP #: build/C/man2/epoll_create.2:73 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:83 msgid "" "Set the close-on-exec (B) flag on the new file descriptor. See " "the description of the B flag in B(2) for reasons why this " "may be useful." msgstr "" #. type: SH #: build/C/man2/epoll_create.2:83 build/C/man2/epoll_ctl.2:156 build/C/man2/epoll_wait.2:137 build/C/man2/poll.2:257 #, no-wrap msgid "RETURN VALUE" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:90 msgid "" "On success, these system calls return a nonnegative file descriptor. On " "error, -1 is returned, and I is set to indicate the error." msgstr "" #. type: SH #: build/C/man2/epoll_create.2:90 build/C/man2/epoll_ctl.2:165 build/C/man2/epoll_wait.2:149 build/C/man2/poll.2:267 #, no-wrap msgid "ERRORS" msgstr "" #. type: TP #: build/C/man2/epoll_create.2:91 build/C/man2/epoll_create.2:95 build/C/man2/epoll_ctl.2:180 build/C/man2/epoll_wait.2:166 build/C/man2/poll.2:276 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:95 msgid "I is not positive." msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:100 msgid "(B()) Invalid value specified in I." msgstr "" #. type: TP #: build/C/man2/epoll_create.2:100 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:108 msgid "" "The per-user limit on the number of epoll instances imposed by " "I was encountered. See B(7) " "for further details." msgstr "" #. type: TP #: build/C/man2/epoll_create.2:108 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:111 msgid "The system limit on the total number of open files has been reached." msgstr "" #. type: TP #: build/C/man2/epoll_create.2:111 build/C/man2/epoll_ctl.2:203 build/C/man2/poll.2:283 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:114 msgid "There was insufficient memory to create the kernel object." msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:118 msgid "" "B() was added to the kernel in version 2.6. Library support " "is provided in glibc starting with version 2.3.2." msgstr "" #. To be precise: kernel 2.5.44. #. The interface should be finalized by Linux kernel 2.5.66. #. type: Plain text #: build/C/man2/epoll_create.2:124 msgid "" "B() was added to the kernel in version 2.6.27. Library " "support is provided in glibc starting with version 2.9." msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:127 msgid "B() is Linux-specific." msgstr "" #. type: SH #: build/C/man2/epoll_create.2:127 build/C/man2/epoll_ctl.2:233 build/C/man2/poll.2:312 #, no-wrap msgid "NOTES" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:133 msgid "" "Since Linux 2.6.8, the I argument is unused, but must be greater than " "zero. (The kernel dynamically sizes the required data structures without " "needing this initial hint.)" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:138 msgid "B(2), B(2), B(2), B(7)" msgstr "" #. type: TH #: build/C/man2/epoll_ctl.2:21 #, no-wrap msgid "EPOLL_CTL" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:24 msgid "epoll_ctl - control interface for an epoll descriptor" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:29 msgid "" "BIB<, int >IB<, int >IB<, struct " "epoll_event *>IB<);>" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:37 msgid "" "This system call performs control operations on the epoll instance referred " "to by the file descriptor I. It requests that the operation I be " "performed for the target file descriptor, I." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:41 msgid "Valid values for the I argument are :" msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:41 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:53 msgid "" "Register the target file descriptor I on the B instance referred " "to by the file descriptor I and associate the event I with the " "internal file linked to I." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:53 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:59 msgid "Change the event I associated with the target file descriptor I." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:59 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:70 msgid "" "Remove (deregister) the target file descriptor I from the B " "instance referred to by I. The I is ignored and can be NULL " "(but see BUGS below)." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:78 msgid "" "The I argument describes the object linked to the file descriptor " "I. The I is defined as :" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:87 #, no-wrap msgid "" "typedef union epoll_data {\n" " void *ptr;\n" " int fd;\n" " uint32_t u32;\n" " uint64_t u64;\n" "} epoll_data_t;\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:92 #, no-wrap msgid "" "struct epoll_event {\n" " uint32_t events; /* Epoll events */\n" " epoll_data_t data; /* User data variable */\n" "};\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:99 msgid "" "The I member is a bit set composed using the following available " "event types:" msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:99 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:104 msgid "The associated file is available for B(2) operations." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:104 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:109 msgid "The associated file is available for B(2) operations." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:109 #, no-wrap msgid "B (since Linux 2.6.17)" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:115 msgid "" "Stream socket peer closed connection, or shut down writing half of " "connection. (This flag is especially useful for writing simple code to " "detect peer shutdown when using Edge Triggered monitoring.)" msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:115 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:120 msgid "There is urgent data available for B(2) operations." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:120 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:126 msgid "" "Error condition happened on the associated file descriptor. " "B(2) will always wait for this event; it is not necessary to " "set it in I." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:126 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:132 msgid "" "Hang up happened on the associated file descriptor. B(2) will " "always wait for this event; it is not necessary to set it in I." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:132 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:142 msgid "" "Sets the Edge Triggered behavior for the associated file descriptor. The " "default behavior for B is Level Triggered. See B(7) for more " "detailed information about Edge and Level Triggered event distribution " "architectures." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:142 #, no-wrap msgid "B (since Linux 2.6.2)" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:156 msgid "" "Sets the one-shot behavior for the associated file descriptor. This means " "that after an event is pulled out with B(2) the associated file " "descriptor is internally disabled and no other events will be reported by " "the B interface. The user must call B() with " "B to rearm the file descriptor with a new event mask." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:165 msgid "" "When successful, B() returns zero. When an error occurs, " "B() returns -1 and I is set appropriately." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:166 build/C/man2/epoll_wait.2:150 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:172 msgid "I or I is not a valid file descriptor." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:172 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:180 msgid "" "I was B, and the supplied file descriptor I is " "already registered with this epoll instance." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:193 msgid "" "I is not an B file descriptor, or I is the same as I, " "or the requested operation I is not supported by this interface." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:193 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:203 msgid "" "I was B or B, and I is not registered " "with this epoll instance." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:208 msgid "" "There was insufficient memory to handle the requested I control " "operation." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:208 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:218 msgid "" "The limit imposed by I was encountered " "while trying to register (B) a new file descriptor on an " "epoll instance. See B(7) for further details." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:218 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:224 msgid "The target file I does not support B." msgstr "" #. To be precise: kernel 2.5.44. #. The interface should be finalized by Linux kernel 2.5.66. #. type: Plain text #: build/C/man2/epoll_ctl.2:229 msgid "B() was added to the kernel in version 2.6." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:233 msgid "" "B() is Linux-specific. Library support is provided in glibc " "starting with version 2.3.2." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:238 msgid "" "The B interface supports all file descriptors that support " "B(2)." msgstr "" #. type: SH #: build/C/man2/epoll_ctl.2:238 build/C/man2/poll.2:334 #, no-wrap msgid "BUGS" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:252 msgid "" "In kernel versions before 2.6.9, the B operation required a " "non-NULL pointer in I, even though this argument is ignored. Since " "Linux 2.6.9, I can be specified as NULL when using B. " "Applications that need to be portable to kernels before 2.6.9 should specify " "a non-NULL pointer in I." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:257 msgid "B(2), B(2), B(2), B(7)" msgstr "" #. type: TH #: build/C/man2/epoll_wait.2:23 #, no-wrap msgid "EPOLL_WAIT" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:26 msgid "epoll_wait, epoll_pwait - wait for an I/O event on an epoll file descriptor" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:35 #, no-wrap msgid "" "BIB<, struct epoll_event *>IB<,>\n" "B< int >IB<, int >IB<);>\n" "BIB<, struct epoll_event *>IB<,>\n" "B< int >IB<, int >IB<,>\n" "B< const sigset_t *>IB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:53 msgid "" "The B() system call waits for events on the B instance " "referred to by the file descriptor I. The memory area pointed to by " "I will contain the events that will be available for the caller. Up " "to I are returned by B(). The I argument " "must be greater than zero." msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:67 msgid "" "The call waits for a maximum time of I milliseconds. Specifying a " "I of -1 makes B() wait indefinitely, while specifying " "a I equal to zero makes B() to return immediately even " "if no events are available (return code equal to zero)." msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:71 msgid "The I is defined as :" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:80 #, no-wrap msgid "" "typedef union epoll_data {\n" " void *ptr;\n" " int fd;\n" " uint32_t u32;\n" " uint64_t u64;\n" "} epoll_data_t;\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:85 #, no-wrap msgid "" "struct epoll_event {\n" " uint32_t events; /* Epoll events */\n" " epoll_data_t data; /* User data variable */\n" "};\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:96 msgid "" "The I of each returned structure will contain the same data the user " "set with an B(2) (B,B) while the " "I member will contain the returned event bit field." msgstr "" #. type: SS #: build/C/man2/epoll_wait.2:96 #, no-wrap msgid "epoll_pwait()" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:110 msgid "" "The relationship between B() and B() is analogous " "to the relationship between B(2): it waits for one of a " "set of file descriptors to become ready to perform I/O." msgstr "" #. type: Plain text #: build/C/man2/poll.2:56 msgid "" "The set of file descriptors to be monitored is specified in the I " "argument, which is an array of structures of the following form:" msgstr "" #. type: Plain text #: build/C/man2/poll.2:64 #, no-wrap msgid "" "struct pollfd {\n" " int fd; /* file descriptor */\n" " short events; /* requested events */\n" " short revents; /* returned events */\n" "};\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:71 msgid "" "The caller should specify the number of items in the I array in " "I." msgstr "" #. type: Plain text #: build/C/man2/poll.2:75 msgid "The field I contains a file descriptor for an open file." msgstr "" #. type: Plain text #: build/C/man2/poll.2:80 msgid "" "The field I is an input parameter, a bit mask specifying the events " "the application is interested in." msgstr "" #. type: Plain text #: build/C/man2/poll.2:99 msgid "" "The field I is an output parameter, filled by the kernel with the " "events that actually occurred. The bits returned in I can include " "any of those specified in I, or one of the values B, " "B, or B. (These three bits are meaningless in the " "I field, and will be set in the I field whenever the " "corresponding condition is true.)" msgstr "" #. type: Plain text #: build/C/man2/poll.2:104 msgid "" "If none of the events requested (and no error) has occurred for any of the " "file descriptors, then B() blocks until one of the events occurs." msgstr "" #. type: Plain text #: build/C/man2/poll.2:113 msgid "" "The I argument specifies an upper limit on the time for which " "B() will block, in milliseconds. Specifying a negative value in " "I means an infinite timeout." msgstr "" #. type: Plain text #: build/C/man2/poll.2:119 msgid "" "The bits that may be set/returned in I and I are defined in " "Ipoll.hE>:" msgstr "" #. type: TP #: build/C/man2/poll.2:120 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:123 msgid "There is data to read." msgstr "" #. type: TP #: build/C/man2/poll.2:123 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:127 msgid "" "There is urgent data to read (e.g., out-of-band data on TCP socket; " "pseudoterminal master in packet mode has seen state change in slave)." msgstr "" #. type: TP #: build/C/man2/poll.2:127 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:130 msgid "Writing now will not block." msgstr "" #. type: TP #: build/C/man2/poll.2:130 #, no-wrap msgid "B (since Linux 2.6.17)" msgstr "" #. type: Plain text #: build/C/man2/poll.2:141 msgid "" "Stream socket peer closed connection, or shut down writing half of " "connection. The B<_GNU_SOURCE> feature test macro must be defined (before " "including I header files) in order to obtain this definition." msgstr "" #. type: TP #: build/C/man2/poll.2:141 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:144 msgid "Error condition (output only)." msgstr "" #. type: TP #: build/C/man2/poll.2:144 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:147 msgid "Hang up (output only)." msgstr "" #. type: TP #: build/C/man2/poll.2:147 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:152 msgid "Invalid request: I not open (output only)." msgstr "" #. type: Plain text #: build/C/man2/poll.2:158 msgid "" "When compiling with B<_XOPEN_SOURCE> defined, one also has the following, " "which convey no further information beyond the bits listed above:" msgstr "" #. type: TP #: build/C/man2/poll.2:159 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:163 msgid "Equivalent to B." msgstr "" #. type: TP #: build/C/man2/poll.2:163 #, no-wrap msgid "B" msgstr "" #. POLLRDBAND is used in the DECnet protocol. #. type: Plain text #: build/C/man2/poll.2:167 msgid "Priority band data can be read (generally unused on Linux)." msgstr "" #. type: TP #: build/C/man2/poll.2:167 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:171 msgid "Equivalent to B." msgstr "" #. type: TP #: build/C/man2/poll.2:171 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/poll.2:174 msgid "Priority data may be written." msgstr "" #. type: Plain text #: build/C/man2/poll.2:178 msgid "Linux also knows about, but does not use B." msgstr "" #. type: SS #: build/C/man2/poll.2:178 #, no-wrap msgid "ppoll()" msgstr "" #. type: Plain text #: build/C/man2/poll.2:192 msgid "" "The relationship between B() and B() is analogous to the " "relationship between B(2) if your kernel does not have a B() system call)." msgstr "" #. type: Plain text #: build/C/man2/poll.2:306 msgid "" "The B() system call was added to Linux in kernel 2.6.16. The " "B() library call was added in glibc 2.4." msgstr "" #. NetBSD 3.0 has a pollts() which is like Linux ppoll(). #. type: Plain text #: build/C/man2/poll.2:312 msgid "B() conforms to POSIX.1-2001. B() is Linux-specific." msgstr "" #. type: Plain text #: build/C/man2/poll.2:320 msgid "" "Some implementations define the nonstandard constant B with the " "value -1 for use as a I for B(). This constant is not " "provided in glibc." msgstr "" #. type: SS #: build/C/man2/poll.2:320 #, no-wrap msgid "Linux Notes" msgstr "" #. type: Plain text #: build/C/man2/poll.2:334 msgid "" "The Linux B() system call modifies its I argument. " "However, the glibc wrapper function hides this behavior by using a local " "variable for the timeout argument that is passed to the system call. Thus, " "the glibc B() function does not modify its I argument." msgstr "" #. type: Plain text #: build/C/man2/poll.2:338 msgid "" "See the discussion of spurious readiness notifications under the BUGS " "section of B(2), B(2), B