X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=man%2Fsd_journal_get_fd.xml;h=e57431ea9e3c964d7cdccacaf75c2641e7962e55;hb=ee531d949c2f62374fc109252f8cbe61c2b8ee39;hp=189d21352bd81a99d94af59496c65b2d0a4d1d57;hpb=f274ece0f76b5709408821e317e87aef76123db6;p=elogind.git diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml index 189d21352..e57431ea9 100644 --- a/man/sd_journal_get_fd.xml +++ b/man/sd_journal_get_fd.xml @@ -44,6 +44,7 @@ sd_journal_get_fd + sd_journal_get_events sd_journal_reliable_fd sd_journal_process sd_journal_wait @@ -63,6 +64,11 @@ sd_journal* j + + int sd_journal_get_events + sd_journal* j + + int sd_journal_reliable_fd sd_journal* j @@ -87,26 +93,35 @@ sd_journal_get_fd() returns a file descriptor that may be asynchronously polled in - an external event loop and is signaled readable as - soon as the journal changes, because new entries or - files were added, rotation took place, or files have - been deleted, and similar. The file descriptor is - suitable for usage in - poll2 - where it will yield POLLIN on changes. The call takes - one argument: the journal context object. Note that - not all file systems are capable of generating the - necessary events for wakeups from this file descriptor - to be enirely reliable. In particular network files - systems do not generate suitable file change events in - all cases. In such a case an application should not - rely alone on wake-ups from this file descriptor but - wake up and recheck the journal in regular time - intervals, for example every 2s. To detect - cases where this is necessary, use + an external event loop and is signaled as soon as the + journal changes, because new entries or files were + added, rotation took place, or files have been + deleted, and similar. The file descriptor is suitable + for usage in + poll2. Use + sd_journal_get_events() for an + events mask to watch for. The call takes one argument: + the journal context object. Note that not all file + systems are capable of generating the necessary events + for wakeups from this file descriptor to be enirely + reliable. In particular network files systems do not + generate suitable file change events in all cases. In + such a case an application should not rely alone on + wake-ups from this file descriptor but wake up and + recheck the journal in regular time intervals, for + example every 2s. To detect cases where this is + necessary, use sd_journal_reliable_fd(), below. + sd_journal_get_events() + will return the + poll2 + mask to wait for. This function will return a + combination of POLLIN and POLLOUT and similar to fill + into the .events field of + struct pollfd. + sd_journal_reliable_fd() may be used to check whether the wakeup events from the file descriptor returned by @@ -119,15 +134,15 @@ sd_journal_get_fd() are sufficient as only source for wake-ups. - After each POLLIN wake-up + After each poll() wake-up sd_journal_process() needs to be - called to process events and reset the readable state - of the file descriptor. This call will also indicate + called to process events. This call will also indicate what kind of change has been detected (see below; note that spurious wake-ups are possible). A synchronous alternative for using sd_journal_get_fd(), + sd_journal_get_events(), sd_journal_reliable_fd() and sd_journal_process() is sd_journal_wait(). It will @@ -139,17 +154,23 @@ (uint64_t) -1 to wait indefinitely. Internally this call simply combines sd_journal_get_fd(), + sd_journal_get_events(), sd_journal_reliable_fd(), poll() and sd_journal_process() into one. - Return Value - sd_journal_get_fd() returns a valid file descriptor on success or a negative errno-style error + sd_journal_get_fd() returns + a valid file descriptor on success or a negative + errno-style error code. + + sd_journal_get_events() + returns a combination of POLLIN, POLLOUT and suchlike + on success or a negative errno-style error code. sd_journal_reliable_fd() @@ -184,6 +205,7 @@ Notes The sd_journal_get_fd(), + sd_journal_get_events(), sd_journal_reliable_fd(), sd_journal_process() and sd_journal_wait() interfaces are @@ -212,7 +234,7 @@ int main(int argc, char *argv[]) { return 1; } for (;;) { - const char *d; + const void *d; size_t l; r = sd_journal_next(j); if (r < 0) { @@ -233,7 +255,7 @@ int main(int argc, char *argv[]) { fprintf(stderr, "Failed to read message field: %s\n", strerror(-r)); continue; } - printf("%.*s\n", (int) l, d); + printf("%.*s\n", (int) l, (const char*) d); } sd_journal_close(j); return 0; @@ -248,15 +270,14 @@ int main(int argc, char *argv[]) { int wait_for_changes(sd_journal *j) { struct pollfd pollfd; - pollfd.fd = sd_journal_get_fd(); - pollfd.events = POLLIN; - poll(&pollfd, 1, sd_journal_reliable_fd() > 0 ? -1 : 2000); + pollfd.fd = sd_journal_get_fd(j); + pollfd.events = sd_journal_get_events(j); + poll(&pollfd, 1, sd_journal_reliable_fd(j) > 0 ? -1 : 2000); return sd_journal_process(j); } - See Also