# 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: 2013-03-22 01:05+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 "2012-04-17" msgstr "" #. type: TH #: build/C/man7/epoll.7:21 build/C/man2/epoll_create.2:24 build/C/man2/epoll_ctl.2:20 build/C/man2/epoll_wait.2:22 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:24 build/C/man2/epoll_ctl.2:20 build/C/man2/epoll_wait.2:22 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:25 build/C/man2/epoll_ctl.2:21 build/C/man2/epoll_wait.2:23 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:27 build/C/man2/epoll_ctl.2:23 build/C/man2/epoll_wait.2:25 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:25 msgid "B<#include Esys/epoll.hE>" msgstr "" #. type: SH #: build/C/man7/epoll.7:26 build/C/man2/epoll_create.2:34 build/C/man2/epoll_ctl.2:28 build/C/man2/epoll_wait.2:35 build/C/man2/poll.2:46 #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:40 msgid "" "The B API performs a similar task to B(2): monitoring multiple " "file descriptors to see if I/O is possible on any of them. The B API " "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:40 build/C/man7/epoll.7:49 build/C/man7/epoll.7:57 #, no-wrap msgid "*" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:49 msgid "" "B(2) creates an B instance and returns a file " "descriptor referring to that instance. (The more recent B(2) " "extends the functionality of B(2).)" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:57 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:61 msgid "" "B(2) waits for I/O events, blocking the calling thread if no " "events are currently available." msgstr "" #. type: SS #: build/C/man7/epoll.7:61 #, no-wrap msgid "Level-triggered and edge-triggered" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:70 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:70 #, no-wrap msgid "1." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:76 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:76 #, no-wrap msgid "2." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:78 msgid "A pipe writer writes 2 kB of data on the write side of the pipe." msgstr "" #. type: IP #: build/C/man7/epoll.7:78 #, no-wrap msgid "3." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:84 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:84 #, no-wrap msgid "4." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:87 msgid "The pipe reader reads 1 kB of data from I." msgstr "" #. type: IP #: build/C/man7/epoll.7:87 #, no-wrap msgid "5." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:91 msgid "A call to B(2) is done." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:126 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:136 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:137 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:140 msgid "with nonblocking file descriptors; and" msgstr "" #. type: TP #: build/C/man7/epoll.7:140 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:148 msgid "" "by waiting for an event only after B(2) or B(2) return " "B." msgstr "" #. type: Plain text #: build/C/man7/epoll.7:159 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:176 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:176 #, 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:184 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:184 #, 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:198 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:198 #, no-wrap msgid "Example for suggested usage" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:227 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:233 #, 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:236 #, no-wrap msgid "" "/* Set up listening socket, \\(aqlisten_sock\\(aq (socket(),\n" " bind(), listen()) */\n" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:242 #, 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:249 #, 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:256 #, 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:278 #, 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:297 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:297 #, no-wrap msgid "Questions and answers" msgstr "" #. type: TP #: build/C/man7/epoll.7:298 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:303 msgid "" "What is the key used to distinguish the file descriptors registered in an " "B set?" msgstr "" #. type: TP #: build/C/man7/epoll.7:303 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:309 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:309 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:314 msgid "" "What happens if you register the same file descriptor on an B " "instance twice?" msgstr "" #. type: TP #: build/C/man7/epoll.7:314 #, 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:345 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:345 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:353 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:353 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:357 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:357 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:362 msgid "Is the B file descriptor itself poll/epoll/selectable?" msgstr "" #. type: TP #: build/C/man7/epoll.7:362 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:369 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:369 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:374 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:374 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:385 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:385 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:390 msgid "" "Can I send an B file descriptor over a UNIX domain socket to another " "process?" msgstr "" #. type: TP #: build/C/man7/epoll.7:390 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:396 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:396 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:401 msgid "" "Will closing a file descriptor cause it to be removed from all B sets " "automatically?" msgstr "" #. type: TP #: build/C/man7/epoll.7:401 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:429 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:429 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:434 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:434 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:437 msgid "They will be combined." msgstr "" #. type: TP #: build/C/man7/epoll.7:437 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:441 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:441 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:447 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:447 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:455 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:455 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:465 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:471 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:487 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:487 #, no-wrap msgid "Possible pitfalls and ways to avoid them" msgstr "" #. type: TP #: build/C/man7/epoll.7:488 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:496 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:504 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:504 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:520 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:531 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:531 build/C/man2/epoll_create.2:108 build/C/man2/epoll_ctl.2:225 build/C/man2/epoll_wait.2:177 build/C/man2/poll.2:312 #, no-wrap msgid "VERSIONS" msgstr "" #. Its interface should be finalized in Linux kernel 2.5.66. #. type: Plain text #: build/C/man7/epoll.7:537 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:537 build/C/man2/epoll_create.2:118 build/C/man2/epoll_ctl.2:230 build/C/man2/epoll_wait.2:187 build/C/man2/poll.2:329 #, no-wrap msgid "CONFORMING TO" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:546 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:546 build/C/man2/epoll_create.2:144 build/C/man2/epoll_ctl.2:253 build/C/man2/epoll_wait.2:219 build/C/man2/poll.2:366 #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:551 msgid "B(2), B(2), B(2), B(2)" msgstr "" #. type: SH #: build/C/man7/epoll.7:551 build/C/man2/epoll_create.2:149 build/C/man2/epoll_ctl.2:258 build/C/man2/epoll_wait.2:223 build/C/man2/poll.2:370 #, no-wrap msgid "COLOPHON" msgstr "" #. type: Plain text #: build/C/man7/epoll.7:558 build/C/man2/epoll_create.2:156 build/C/man2/epoll_ctl.2:265 build/C/man2/epoll_wait.2:230 build/C/man2/poll.2:377 msgid "" "This page is part of release 3.50 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:24 #, no-wrap msgid "EPOLL_CREATE" msgstr "" #. type: TH #: build/C/man2/epoll_create.2:24 build/C/man2/epoll_ctl.2:20 #, no-wrap msgid "2012-04-15" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:27 msgid "epoll_create, epoll_create1 - open an epoll file descriptor" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:30 build/C/man2/epoll_wait.2:28 #, no-wrap msgid "B<#include Esys/epoll.hE>\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:33 #, no-wrap msgid "" "BIB<);>\n" "BIB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:42 msgid "" "B() creates an B(7) instance. Since Linux 2.6.8, the " "I argument is ignored, but must be greater than zero; see NOTES below." msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:55 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: SS #: build/C/man2/epoll_create.2:55 #, no-wrap msgid "epoll_create1()" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:67 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:67 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:77 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:77 build/C/man2/epoll_ctl.2:157 build/C/man2/epoll_wait.2:140 build/C/man2/poll.2:283 #, no-wrap msgid "RETURN VALUE" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:84 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:84 build/C/man2/epoll_ctl.2:166 build/C/man2/epoll_wait.2:152 build/C/man2/poll.2:293 #, no-wrap msgid "ERRORS" msgstr "" #. type: TP #: build/C/man2/epoll_create.2:85 build/C/man2/epoll_create.2:89 build/C/man2/epoll_ctl.2:181 build/C/man2/epoll_wait.2:169 build/C/man2/poll.2:302 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:89 msgid "I is not positive." msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:94 msgid "(B()) Invalid value specified in I." msgstr "" #. type: TP #: build/C/man2/epoll_create.2:94 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:102 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:102 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:105 msgid "The system limit on the total number of open files has been reached." msgstr "" #. type: TP #: build/C/man2/epoll_create.2:105 build/C/man2/epoll_ctl.2:204 build/C/man2/poll.2:309 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:108 msgid "There was insufficient memory to create the kernel object." msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:112 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:118 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:121 msgid "B() is Linux-specific." msgstr "" #. type: SH #: build/C/man2/epoll_create.2:121 build/C/man2/epoll_ctl.2:234 build/C/man2/epoll_wait.2:190 build/C/man2/poll.2:335 #, no-wrap msgid "NOTES" msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:144 msgid "" "In the initial B() implementation, the I argument " "informed the kernel of the number of file descriptors that the caller " "expected to add to the B instance. The kernel used this information " "as a hint for the amount of space to initially allocate in internal data " "structures describing events. (If necessary, the kernel would allocate more " "space if the caller's usage exceeded the hint given in I.) Nowadays, " "this hint is no longer required (the kernel dynamically sizes the required " "data structures without needing the hint), but I must still be greater " "than zero, in order to ensure backward compatibility when new B " "applications are run on older kernels." msgstr "" #. type: Plain text #: build/C/man2/epoll_create.2:149 msgid "B(2), B(2), B(2), B(7)" msgstr "" #. type: TH #: build/C/man2/epoll_ctl.2:20 #, no-wrap msgid "EPOLL_CTL" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:23 msgid "epoll_ctl - control interface for an epoll descriptor" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:28 msgid "" "BIB<, int >IB<, int >IB<, struct " "epoll_event *>IB<);>" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:38 msgid "" "This system call performs control operations on the B(7) 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:42 msgid "Valid values for the I argument are :" msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:42 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:54 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:54 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:60 msgid "Change the event I associated with the target file descriptor I." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:60 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:71 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:79 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:88 #, 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:93 #, 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:100 msgid "" "The I member is a bit set composed using the following available " "event types:" msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:100 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:105 msgid "The associated file is available for B(2) operations." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:105 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:110 msgid "The associated file is available for B(2) operations." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:110 #, no-wrap msgid "B (since Linux 2.6.17)" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:116 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:116 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:121 msgid "There is urgent data available for B(2) operations." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:121 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:127 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:127 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:133 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:133 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:143 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:143 #, no-wrap msgid "B (since Linux 2.6.2)" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:157 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:166 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:167 build/C/man2/epoll_wait.2:153 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:173 msgid "I or I is not a valid file descriptor." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:173 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:181 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:194 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:194 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:204 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:209 msgid "" "There was insufficient memory to handle the requested I control " "operation." msgstr "" #. type: TP #: build/C/man2/epoll_ctl.2:209 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:219 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:219 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:225 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:230 msgid "B() was added to the kernel in version 2.6." msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:234 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:239 msgid "" "The B interface supports all file descriptors that support " "B(2)." msgstr "" #. type: SH #: build/C/man2/epoll_ctl.2:239 build/C/man2/epoll_wait.2:207 build/C/man2/poll.2:362 #, no-wrap msgid "BUGS" msgstr "" #. type: Plain text #: build/C/man2/epoll_ctl.2:253 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:258 msgid "B(2), B(2), B(2), B(7)" msgstr "" #. type: TH #: build/C/man2/epoll_wait.2:22 #, no-wrap msgid "EPOLL_WAIT" msgstr "" #. type: TH #: build/C/man2/epoll_wait.2:22 build/C/man2/poll.2:31 #, no-wrap msgid "2012-08-17" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:25 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:34 #, 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:52 msgid "" "The B() system call waits for events on the B(7) " "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:70 msgid "" "The I argument specifies the minimum number of milliseconds that " "B() will block. (This interval will be rounded up to the " "system clock granularity, and kernel scheduling delays mean that the " "blocking interval may overrun by a small amount.) Specifying a I " "of -1 causes B() to block indefinitely, while specifying a " "I equal to zero cause B() to return immediately, even " "if no events are available." msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:74 msgid "The I is defined as :" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:83 #, 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:88 #, 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:99 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:99 #, no-wrap msgid "epoll_pwait()" msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:113 msgid "" "The relationship between B() and B() is analogous " "to the relationship between B(2)." msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:219 msgid "" "In kernels before 2.6.37, a I value larger than approximately " "I milliseconds is treated as -1 (i.e., infinity). Thus, for " "example, on a system where the I is 4 and the kernel I " "value is 1000, this means that timeouts greater than 35.79 minutes are " "treated as infinity." msgstr "" #. type: Plain text #: build/C/man2/epoll_wait.2:223 msgid "B(2), B(2), B(7)" msgstr "" #. type: TH #: build/C/man2/poll.2:31 #, no-wrap msgid "POLL" msgstr "" #. type: Plain text #: build/C/man2/poll.2:34 msgid "poll, ppoll - wait for some event on a file descriptor" msgstr "" #. type: Plain text #: build/C/man2/poll.2:37 #, no-wrap msgid "B<#include Epoll.hE>\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:39 #, no-wrap msgid "" "BIB<, nfds_t >IB<, int " ">IB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:42 #, no-wrap msgid "" "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */\n" "B<#include Epoll.hE>\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:45 #, no-wrap msgid "" "BIB<, nfds_t >IB<, >\n" "B< const struct timespec *>IB<, const sigset_t " "*>IB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:52 msgid "" "B() performs a similar task to B(2) and B(2): like B(2), " "B() allows an application to safely wait until either a file " "descriptor becomes ready or until a signal is caught." msgstr "" #. type: Plain text #: build/C/man2/poll.2:224 msgid "" "Other than the difference in the precision of the I argument, the " "following B() call:" msgstr "" #. type: Plain text #: build/C/man2/poll.2:227 #, no-wrap msgid " ready = ppoll(&fds, nfds, timeout_ts, &sigmask);\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:236 #, no-wrap msgid "" " sigset_t origmask;\n" " int timeout;\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:242 #, no-wrap msgid "" " timeout = (timeout_ts == NULL) ? -1 :\n" " (timeout_ts.tv_sec * 1000 + timeout_ts.tv_nsec / 1000000);\n" " sigprocmask(SIG_SETMASK, &sigmask, &origmask);\n" " ready = poll(&fds, nfds, timeout);\n" " sigprocmask(SIG_SETMASK, &origmask, NULL);\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:249 msgid "" "See the description of B(2) for an explanation of why B() " "is necessary." msgstr "" #. type: Plain text #: build/C/man2/poll.2:261 msgid "" "If the I argument is specified as NULL, then no signal mask " "manipulation is performed (and thus B() differs from B() only " "in the precision of the I argument)." msgstr "" #. type: Plain text #: build/C/man2/poll.2:268 msgid "" "The I argument specifies an upper limit on the amount of time " "that B() will block. This argument is a pointer to a structure of " "the following form:" msgstr "" #. type: Plain text #: build/C/man2/poll.2:275 #, no-wrap msgid "" "struct timespec {\n" " long tv_sec; /* seconds */\n" " long tv_nsec; /* nanoseconds */\n" "};\n" msgstr "" #. type: Plain text #: build/C/man2/poll.2:283 msgid "" "If I is specified as NULL, then B() can block " "indefinitely." msgstr "" #. type: Plain text #: build/C/man2/poll.2:293 msgid "" "On success, a positive number is returned; this is the number of structures " "which have nonzero I fields (in other words, those descriptors with " "events or errors reported). A value of 0 indicates that the call timed out " "and no file descriptors were ready. On error, -1 is returned, and I " "is set appropriately." msgstr "" #. type: Plain text #: build/C/man2/poll.2:298 msgid "" "The array given as argument was not contained in the calling program's " "address space." msgstr "" #. type: Plain text #: build/C/man2/poll.2:302 msgid "A signal occurred before any requested event; see B(7)." msgstr "" #. type: Plain text #: build/C/man2/poll.2:309 msgid "The I value exceeds the B value." msgstr "" #. type: Plain text #: build/C/man2/poll.2:312 msgid "There was no space to allocate file descriptor tables." msgstr "" #. library call was introduced in libc 5.4.28 #. type: Plain text #: build/C/man2/poll.2:322 msgid "" "The B() system call was introduced in Linux 2.1.23. On older kernels " "that lack this system call, the glibc (and the old Linux libc) B() " "wrapper function provides emulation using B(2)." msgstr "" #. type: SS #: build/C/man2/poll.2:348 #, no-wrap msgid "Linux notes" msgstr "" #. type: Plain text #: build/C/man2/poll.2:362 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:366 msgid "" "See the discussion of spurious readiness notifications under the BUGS " "section of B(2), B(2), B