diff options
Diffstat (limited to '')
-rw-r--r-- | templates/man7/aio.7.pot | 1243 |
1 files changed, 1243 insertions, 0 deletions
diff --git a/templates/man7/aio.7.pot b/templates/man7/aio.7.pot new file mode 100644 index 00000000..bb653ae9 --- /dev/null +++ b/templates/man7/aio.7.pot @@ -0,0 +1,1243 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2024-03-01 16:52+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. type: TH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "AIO" +msgstr "" + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "2023-10-31" +msgstr "" + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "Linux man-pages 6.06" +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "NAME" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "aio - POSIX asynchronous I/O overview" +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "DESCRIPTION" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The POSIX asynchronous I/O (AIO) interface allows applications to initiate " +"one or more I/O operations that are performed asynchronously (i.e., in the " +"background). The application can elect to be notified of completion of the " +"I/O operation in a variety of ways: by delivery of a signal, by " +"instantiation of a thread, or no notification at all." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The POSIX AIO interface consists of the following functions:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<aio_read>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Enqueue a read request. This is the asynchronous analog of B<read>(2)." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<aio_write>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Enqueue a write request. This is the asynchronous analog of B<write>(2)." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<aio_fsync>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Enqueue a sync request for the I/O operations on a file descriptor. This is " +"the asynchronous analog of B<fsync>(2) and B<fdatasync>(2)." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<aio_error>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Obtain the error status of an enqueued I/O request." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<aio_return>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Obtain the return status of a completed I/O request." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<aio_suspend>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Suspend the caller until one or more of a specified set of I/O requests " +"completes." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<aio_cancel>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Attempt to cancel outstanding I/O requests on a specified file descriptor." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<lio_listio>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Enqueue multiple I/O requests using a single function call." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The I<aiocb> (\"asynchronous I/O control block\") structure defines " +"parameters that control an I/O operation. An argument of this type is " +"employed with all of the functions listed above. This structure has the " +"following form:" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"#include E<lt>aiocb.hE<gt>\n" +"\\&\n" +"struct aiocb {\n" +" /* The order of these fields is implementation-dependent */\n" +"\\&\n" +" int aio_fildes; /* File descriptor */\n" +" off_t aio_offset; /* File offset */\n" +" volatile void *aio_buf; /* Location of buffer */\n" +" size_t aio_nbytes; /* Length of transfer */\n" +" int aio_reqprio; /* Request priority */\n" +" struct sigevent aio_sigevent; /* Notification method */\n" +" int aio_lio_opcode; /* Operation to be performed;\n" +" lio_listio() only */\n" +"\\&\n" +" /* Various implementation-internal fields not shown */\n" +"};\n" +"\\&\n" +"/* Operation codes for \\[aq]aio_lio_opcode\\[aq]: */\n" +"\\&\n" +"enum { LIO_READ, LIO_WRITE, LIO_NOP };\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The fields of this structure are as follows:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<aio_fildes>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The file descriptor on which the I/O operation is to be performed." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<aio_offset>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "This is the file offset at which the I/O operation is to be performed." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<aio_buf>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "This is the buffer used to transfer data for a read or write operation." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<aio_nbytes>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "This is the size of the buffer pointed to by I<aio_buf>." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<aio_reqprio>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This field specifies a value that is subtracted from the calling thread's " +"real-time priority in order to determine the priority for execution of this " +"I/O request (see B<pthread_setschedparam>(3)). The specified value must be " +"between 0 and the value returned by I<sysconf(_SC_AIO_PRIO_DELTA_MAX)>. " +"This field is ignored for file synchronization operations." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<aio_sigevent>" +msgstr "" + +#. type: Plain text +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +msgid "" +"This field is a structure that specifies how the caller is to be notified " +"when the asynchronous I/O operation completes. Possible values for " +"I<aio_sigevent.sigev_notify> are B<SIGEV_NONE>, B<SIGEV_SIGNAL>, and " +"B<SIGEV_THREAD>. See B<sigevent>(3type) for further details." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<aio_lio_opcode>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The type of operation to be performed; used only for B<lio_listio>(3)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"In addition to the standard functions listed above, the GNU C library " +"provides the following extension to the POSIX AIO API:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<aio_init>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Set parameters for tuning the behavior of the glibc POSIX AIO implementation." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "ERRORS" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EINVAL>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The I<aio_reqprio> field of the I<aiocb> structure was less than 0, or was " +"greater than the limit returned by the call " +"I<sysconf(_SC_AIO_PRIO_DELTA_MAX)>." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "STANDARDS" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +msgid "POSIX.1-2008." +msgstr "" + +#. type: SH +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "HISTORY" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +msgid "POSIX.1-2001. glibc 2.1." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "NOTES" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"It is a good idea to zero out the control block buffer before use (see " +"B<memset>(3)). The control block buffer and the buffer pointed to by " +"I<aio_buf> must not be changed while the I/O operation is in progress. " +"These buffers must remain valid until the I/O operation completes." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Simultaneous asynchronous read or write operations using the same I<aiocb> " +"structure yield undefined results." +msgstr "" + +#. http://lse.sourceforge.net/io/aio.html +#. http://lse.sourceforge.net/io/aionotes.txt +#. http://lwn.net/Articles/148755/ +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The current Linux POSIX AIO implementation is provided in user space by " +"glibc. This has a number of limitations, most notably that maintaining " +"multiple threads to perform I/O operations is expensive and scales poorly. " +"Work has been in progress for some time on a kernel state-machine-based " +"implementation of asynchronous I/O (see B<io_submit>(2), B<io_setup>(2), " +"B<io_cancel>(2), B<io_destroy>(2), B<io_getevents>(2)), but this " +"implementation hasn't yet matured to the point where the POSIX AIO " +"implementation can be completely reimplemented using the kernel system calls." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "EXAMPLES" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The program below opens each of the files named in its command-line " +"arguments and queues a request on the resulting file descriptor using " +"B<aio_read>(3). The program then loops, periodically monitoring each of the " +"I/O operations that is still in progress using B<aio_error>(3). Each of the " +"I/O requests is set up to provide notification by delivery of a signal. " +"After all I/O requests have completed, the program retrieves their status " +"using B<aio_return>(3)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<SIGQUIT> signal (generated by typing control-\\e) causes the program " +"to request cancelation of each of the outstanding requests using " +"B<aio_cancel>(3)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Here is an example of what we might see when running this program. In this " +"example, the program queues two requests to standard input, and these are " +"satisfied by two lines of input containing \"abc\" and \"x\"." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"$ B<./a.out /dev/stdin /dev/stdin>\n" +"opened /dev/stdin on descriptor 3\n" +"opened /dev/stdin on descriptor 4\n" +"aio_error():\n" +" for request 0 (descriptor 3): In progress\n" +" for request 1 (descriptor 4): In progress\n" +"B<abc>\n" +"I/O completion signal received\n" +"aio_error():\n" +" for request 0 (descriptor 3): I/O succeeded\n" +" for request 1 (descriptor 4): In progress\n" +"aio_error():\n" +" for request 1 (descriptor 4): In progress\n" +"B<x>\n" +"I/O completion signal received\n" +"aio_error():\n" +" for request 1 (descriptor 4): I/O succeeded\n" +"All I/O requests completed\n" +"aio_return():\n" +" for request 0 (descriptor 3): 4\n" +" for request 1 (descriptor 4): 2\n" +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Program source" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"#include E<lt>fcntl.hE<gt>\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>errno.hE<gt>\n" +"#include E<lt>aio.hE<gt>\n" +"#include E<lt>signal.hE<gt>\n" +"\\&\n" +"#define BUF_SIZE 20 /* Size of buffers for read operations */\n" +"\\&\n" +"#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)\n" +"\\&\n" +"struct ioRequest { /* Application-defined structure for tracking\n" +" I/O requests */\n" +" int reqNum;\n" +" int status;\n" +" struct aiocb *aiocbp;\n" +"};\n" +"\\&\n" +"static volatile sig_atomic_t gotSIGQUIT = 0;\n" +" /* On delivery of SIGQUIT, we attempt to\n" +" cancel all outstanding I/O requests */\n" +"\\&\n" +"static void /* Handler for SIGQUIT */\n" +"quitHandler(int sig)\n" +"{\n" +" gotSIGQUIT = 1;\n" +"}\n" +"\\&\n" +"#define IO_SIGNAL SIGUSR1 /* Signal used to notify I/O completion */\n" +"\\&\n" +"static void /* Handler for I/O completion signal */\n" +"aioSigHandler(int sig, siginfo_t *si, void *ucontext)\n" +"{\n" +" if (si-E<gt>si_code == SI_ASYNCIO) {\n" +" write(STDOUT_FILENO, \"I/O completion signal received\\en\", 31);\n" +"\\&\n" +" /* The corresponding ioRequest structure would be available as\n" +" struct ioRequest *ioReq = si-E<gt>si_value.sival_ptr;\n" +" and the file descriptor would then be available via\n" +" ioReq-E<gt>aiocbp-E<gt>aio_fildes */\n" +" }\n" +"}\n" +"\\&\n" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" struct sigaction sa;\n" +" int s;\n" +" int numReqs; /* Total number of queued I/O requests */\n" +" int openReqs; /* Number of I/O requests still in progress */\n" +"\\&\n" +" if (argc E<lt> 2) {\n" +" fprintf(stderr, \"Usage: %s E<lt>pathnameE<gt> E<lt>pathnameE<gt>...\\en\",\n" +" argv[0]);\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" numReqs = argc - 1;\n" +"\\&\n" +" /* Allocate our arrays. */\n" +"\\&\n" +" struct ioRequest *ioList = calloc(numReqs, sizeof(*ioList));\n" +" if (ioList == NULL)\n" +" errExit(\"calloc\");\n" +"\\&\n" +" struct aiocb *aiocbList = calloc(numReqs, sizeof(*aiocbList));\n" +" if (aiocbList == NULL)\n" +" errExit(\"calloc\");\n" +"\\&\n" +" /* Establish handlers for SIGQUIT and the I/O completion signal. */\n" +"\\&\n" +" sa.sa_flags = SA_RESTART;\n" +" sigemptyset(&sa.sa_mask);\n" +"\\&\n" +" sa.sa_handler = quitHandler;\n" +" if (sigaction(SIGQUIT, &sa, NULL) == -1)\n" +" errExit(\"sigaction\");\n" +"\\&\n" +" sa.sa_flags = SA_RESTART | SA_SIGINFO;\n" +" sa.sa_sigaction = aioSigHandler;\n" +" if (sigaction(IO_SIGNAL, &sa, NULL) == -1)\n" +" errExit(\"sigaction\");\n" +"\\&\n" +" /* Open each file specified on the command line, and queue\n" +" a read request on the resulting file descriptor. */\n" +"\\&\n" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" ioList[j].reqNum = j;\n" +" ioList[j].status = EINPROGRESS;\n" +" ioList[j].aiocbp = &aiocbList[j];\n" +"\\&\n" +" ioList[j].aiocbp-E<gt>aio_fildes = open(argv[j + 1], O_RDONLY);\n" +" if (ioList[j].aiocbp-E<gt>aio_fildes == -1)\n" +" errExit(\"open\");\n" +" printf(\"opened %s on descriptor %d\\en\", argv[j + 1],\n" +" ioList[j].aiocbp-E<gt>aio_fildes);\n" +"\\&\n" +" ioList[j].aiocbp-E<gt>aio_buf = malloc(BUF_SIZE);\n" +" if (ioList[j].aiocbp-E<gt>aio_buf == NULL)\n" +" errExit(\"malloc\");\n" +"\\&\n" +" ioList[j].aiocbp-E<gt>aio_nbytes = BUF_SIZE;\n" +" ioList[j].aiocbp-E<gt>aio_reqprio = 0;\n" +" ioList[j].aiocbp-E<gt>aio_offset = 0;\n" +" ioList[j].aiocbp-E<gt>aio_sigevent.sigev_notify = SIGEV_SIGNAL;\n" +" ioList[j].aiocbp-E<gt>aio_sigevent.sigev_signo = IO_SIGNAL;\n" +" ioList[j].aiocbp-E<gt>aio_sigevent.sigev_value.sival_ptr =\n" +" &ioList[j];\n" +"\\&\n" +" s = aio_read(ioList[j].aiocbp);\n" +" if (s == -1)\n" +" errExit(\"aio_read\");\n" +" }\n" +"\\&\n" +" openReqs = numReqs;\n" +"\\&\n" +" /* Loop, monitoring status of I/O requests. */\n" +"\\&\n" +" while (openReqs E<gt> 0) {\n" +" sleep(3); /* Delay between each monitoring step */\n" +"\\&\n" +" if (gotSIGQUIT) {\n" +"\\&\n" +" /* On receipt of SIGQUIT, attempt to cancel each of the\n" +" outstanding I/O requests, and display status returned\n" +" from the cancelation requests. */\n" +"\\&\n" +" printf(\"got SIGQUIT; canceling I/O requests: \\en\");\n" +"\\&\n" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" if (ioList[j].status == EINPROGRESS) {\n" +" printf(\" Request %zu on descriptor %d:\", j,\n" +" ioList[j].aiocbp-E<gt>aio_fildes);\n" +" s = aio_cancel(ioList[j].aiocbp-E<gt>aio_fildes,\n" +" ioList[j].aiocbp);\n" +" if (s == AIO_CANCELED)\n" +" printf(\"I/O canceled\\en\");\n" +" else if (s == AIO_NOTCANCELED)\n" +" printf(\"I/O not canceled\\en\");\n" +" else if (s == AIO_ALLDONE)\n" +" printf(\"I/O all done\\en\");\n" +" else\n" +" perror(\"aio_cancel\");\n" +" }\n" +" }\n" +"\\&\n" +" gotSIGQUIT = 0;\n" +" }\n" +"\\&\n" +" /* Check the status of each I/O request that is still\n" +" in progress. */\n" +"\\&\n" +" printf(\"aio_error():\\en\");\n" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" if (ioList[j].status == EINPROGRESS) {\n" +" printf(\" for request %zu (descriptor %d): \",\n" +" j, ioList[j].aiocbp-E<gt>aio_fildes);\n" +" ioList[j].status = aio_error(ioList[j].aiocbp);\n" +"\\&\n" +" switch (ioList[j].status) {\n" +" case 0:\n" +" printf(\"I/O succeeded\\en\");\n" +" break;\n" +" case EINPROGRESS:\n" +" printf(\"In progress\\en\");\n" +" break;\n" +" case ECANCELED:\n" +" printf(\"Canceled\\en\");\n" +" break;\n" +" default:\n" +" perror(\"aio_error\");\n" +" break;\n" +" }\n" +"\\&\n" +" if (ioList[j].status != EINPROGRESS)\n" +" openReqs--;\n" +" }\n" +" }\n" +" }\n" +"\\&\n" +" printf(\"All I/O requests completed\\en\");\n" +"\\&\n" +" /* Check status return of all I/O requests. */\n" +"\\&\n" +" printf(\"aio_return():\\en\");\n" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" ssize_t s;\n" +"\\&\n" +" s = aio_return(ioList[j].aiocbp);\n" +" printf(\" for request %zu (descriptor %d): %zd\\en\",\n" +" j, ioList[j].aiocbp-E<gt>aio_fildes, s);\n" +" }\n" +"\\&\n" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "SEE ALSO" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"B<io_cancel>(2), B<io_destroy>(2), B<io_getevents>(2), B<io_setup>(2), " +"B<io_submit>(2), B<aio_cancel>(3), B<aio_error>(3), B<aio_init>(3), " +"B<aio_read>(3), B<aio_return>(3), B<aio_write>(3), B<lio_listio>(3)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"\"Asynchronous I/O Support in Linux 2.5\", Bhattacharya, Pratt, Pulavarty, " +"and Morgan, Proceedings of the Linux Symposium, 2003, E<.UR https://www." +"kernel.org/doc/ols/2003/ols2003-pages-351-366.pdf> E<.UE>" +msgstr "" + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "2023-02-05" +msgstr "" + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "Linux man-pages 6.03" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "#include E<lt>aiocb.hE<gt>\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"struct aiocb {\n" +" /* The order of these fields is implementation-dependent */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" int aio_fildes; /* File descriptor */\n" +" off_t aio_offset; /* File offset */\n" +" volatile void *aio_buf; /* Location of buffer */\n" +" size_t aio_nbytes; /* Length of transfer */\n" +" int aio_reqprio; /* Request priority */\n" +" struct sigevent aio_sigevent; /* Notification method */\n" +" int aio_lio_opcode; /* Operation to be performed;\n" +" lio_listio() only */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* Various implementation-internal fields not shown */\n" +"};\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "/* Operation codes for \\[aq]aio_lio_opcode\\[aq]: */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "enum { LIO_READ, LIO_WRITE, LIO_NOP };\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm debian-unstable opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This field is a structure that specifies how the caller is to be notified " +"when the asynchronous I/O operation completes. Possible values for " +"I<aio_sigevent.sigev_notify> are B<SIGEV_NONE>, B<SIGEV_SIGNAL>, and " +"B<SIGEV_THREAD>. See B<sigevent>(7) for further details." +msgstr "" + +#. type: SH +#: debian-bookworm +#, no-wrap +msgid "VERSIONS" +msgstr "" + +#. type: Plain text +#: debian-bookworm +msgid "The POSIX AIO interfaces are provided by glibc since glibc 2.1." +msgstr "" + +#. type: Plain text +#: debian-bookworm +msgid "POSIX.1-2001, POSIX.1-2008." +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"#include E<lt>fcntl.hE<gt>\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>errno.hE<gt>\n" +"#include E<lt>aio.hE<gt>\n" +"#include E<lt>signal.hE<gt>\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "#define BUF_SIZE 20 /* Size of buffers for read operations */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"struct ioRequest { /* Application-defined structure for tracking\n" +" I/O requests */\n" +" int reqNum;\n" +" int status;\n" +" struct aiocb *aiocbp;\n" +"};\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static volatile sig_atomic_t gotSIGQUIT = 0;\n" +" /* On delivery of SIGQUIT, we attempt to\n" +" cancel all outstanding I/O requests */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static void /* Handler for SIGQUIT */\n" +"quitHandler(int sig)\n" +"{\n" +" gotSIGQUIT = 1;\n" +"}\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "#define IO_SIGNAL SIGUSR1 /* Signal used to notify I/O completion */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static void /* Handler for I/O completion signal */\n" +"aioSigHandler(int sig, siginfo_t *si, void *ucontext)\n" +"{\n" +" if (si-E<gt>si_code == SI_ASYNCIO) {\n" +" write(STDOUT_FILENO, \"I/O completion signal received\\en\", 31);\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* The corresponding ioRequest structure would be available as\n" +" struct ioRequest *ioReq = si-E<gt>si_value.sival_ptr;\n" +" and the file descriptor would then be available via\n" +" ioReq-E<gt>aiocbp-E<gt>aio_fildes */\n" +" }\n" +"}\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" struct sigaction sa;\n" +" int s;\n" +" int numReqs; /* Total number of queued I/O requests */\n" +" int openReqs; /* Number of I/O requests still in progress */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (argc E<lt> 2) {\n" +" fprintf(stderr, \"Usage: %s E<lt>pathnameE<gt> E<lt>pathnameE<gt>...\\en\",\n" +" argv[0]);\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " numReqs = argc - 1;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Allocate our arrays. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" struct ioRequest *ioList = calloc(numReqs, sizeof(*ioList));\n" +" if (ioList == NULL)\n" +" errExit(\"calloc\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" struct aiocb *aiocbList = calloc(numReqs, sizeof(*aiocbList));\n" +" if (aiocbList == NULL)\n" +" errExit(\"calloc\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Establish handlers for SIGQUIT and the I/O completion signal. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" sa.sa_flags = SA_RESTART;\n" +" sigemptyset(&sa.sa_mask);\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" sa.sa_handler = quitHandler;\n" +" if (sigaction(SIGQUIT, &sa, NULL) == -1)\n" +" errExit(\"sigaction\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" sa.sa_flags = SA_RESTART | SA_SIGINFO;\n" +" sa.sa_sigaction = aioSigHandler;\n" +" if (sigaction(IO_SIGNAL, &sa, NULL) == -1)\n" +" errExit(\"sigaction\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* Open each file specified on the command line, and queue\n" +" a read request on the resulting file descriptor. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" ioList[j].reqNum = j;\n" +" ioList[j].status = EINPROGRESS;\n" +" ioList[j].aiocbp = &aiocbList[j];\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" ioList[j].aiocbp-E<gt>aio_fildes = open(argv[j + 1], O_RDONLY);\n" +" if (ioList[j].aiocbp-E<gt>aio_fildes == -1)\n" +" errExit(\"open\");\n" +" printf(\"opened %s on descriptor %d\\en\", argv[j + 1],\n" +" ioList[j].aiocbp-E<gt>aio_fildes);\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" ioList[j].aiocbp-E<gt>aio_buf = malloc(BUF_SIZE);\n" +" if (ioList[j].aiocbp-E<gt>aio_buf == NULL)\n" +" errExit(\"malloc\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" ioList[j].aiocbp-E<gt>aio_nbytes = BUF_SIZE;\n" +" ioList[j].aiocbp-E<gt>aio_reqprio = 0;\n" +" ioList[j].aiocbp-E<gt>aio_offset = 0;\n" +" ioList[j].aiocbp-E<gt>aio_sigevent.sigev_notify = SIGEV_SIGNAL;\n" +" ioList[j].aiocbp-E<gt>aio_sigevent.sigev_signo = IO_SIGNAL;\n" +" ioList[j].aiocbp-E<gt>aio_sigevent.sigev_value.sival_ptr =\n" +" &ioList[j];\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" s = aio_read(ioList[j].aiocbp);\n" +" if (s == -1)\n" +" errExit(\"aio_read\");\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " openReqs = numReqs;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Loop, monitoring status of I/O requests. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" while (openReqs E<gt> 0) {\n" +" sleep(3); /* Delay between each monitoring step */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " if (gotSIGQUIT) {\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* On receipt of SIGQUIT, attempt to cancel each of the\n" +" outstanding I/O requests, and display status returned\n" +" from the cancelation requests. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " printf(\"got SIGQUIT; canceling I/O requests: \\en\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" if (ioList[j].status == EINPROGRESS) {\n" +" printf(\" Request %zu on descriptor %d:\", j,\n" +" ioList[j].aiocbp-E<gt>aio_fildes);\n" +" s = aio_cancel(ioList[j].aiocbp-E<gt>aio_fildes,\n" +" ioList[j].aiocbp);\n" +" if (s == AIO_CANCELED)\n" +" printf(\"I/O canceled\\en\");\n" +" else if (s == AIO_NOTCANCELED)\n" +" printf(\"I/O not canceled\\en\");\n" +" else if (s == AIO_ALLDONE)\n" +" printf(\"I/O all done\\en\");\n" +" else\n" +" perror(\"aio_cancel\");\n" +" }\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" gotSIGQUIT = 0;\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* Check the status of each I/O request that is still\n" +" in progress. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" printf(\"aio_error():\\en\");\n" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" if (ioList[j].status == EINPROGRESS) {\n" +" printf(\" for request %zu (descriptor %d): \",\n" +" j, ioList[j].aiocbp-E<gt>aio_fildes);\n" +" ioList[j].status = aio_error(ioList[j].aiocbp);\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" switch (ioList[j].status) {\n" +" case 0:\n" +" printf(\"I/O succeeded\\en\");\n" +" break;\n" +" case EINPROGRESS:\n" +" printf(\"In progress\\en\");\n" +" break;\n" +" case ECANCELED:\n" +" printf(\"Canceled\\en\");\n" +" break;\n" +" default:\n" +" perror(\"aio_error\");\n" +" break;\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (ioList[j].status != EINPROGRESS)\n" +" openReqs--;\n" +" }\n" +" }\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " printf(\"All I/O requests completed\\en\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Check status return of all I/O requests. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" printf(\"aio_return():\\en\");\n" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" ssize_t s;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" s = aio_return(ioList[j].aiocbp);\n" +" printf(\" for request %zu (descriptor %d): %zd\\en\",\n" +" j, ioList[j].aiocbp-E<gt>aio_fildes, s);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "2023-05-03" +msgstr "" + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "Linux man-pages 6.05.01" +msgstr "" + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "2023-03-30" +msgstr "" + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "Linux man-pages 6.04" +msgstr "" |