diff options
Diffstat (limited to 'po/ru/man7/aio.7.po')
-rw-r--r-- | po/ru/man7/aio.7.po | 1622 |
1 files changed, 1622 insertions, 0 deletions
diff --git a/po/ru/man7/aio.7.po b/po/ru/man7/aio.7.po new file mode 100644 index 00000000..48204532 --- /dev/null +++ b/po/ru/man7/aio.7.po @@ -0,0 +1,1622 @@ +# Russian translation of manpages +# This file is distributed under the same license as the manpages-l10n package. +# Copyright © of this file: +# Dmitry Bolkhovskikh <d20052005@yandex.ru>, 2017. +# Yuri Kozlov <yuray@komyakino.ru>, 2012-2019. +msgid "" +msgstr "" +"Project-Id-Version: manpages-l10n\n" +"POT-Creation-Date: 2024-03-01 16:52+0100\n" +"PO-Revision-Date: 2019-08-11 08:40+0300\n" +"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" +"Language-Team: Russian <man-pages-ru-talks@lists.sourceforge.net>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " +"(n%100>=11 && n%100<=14)? 2 : 3);\n" +"X-Generator: Lokalize 2.0\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 "AIO" + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "2023-10-31" +msgstr "31 октября 2023 г." + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "Linux man-pages 6.06" +msgstr "Linux man-pages 6.06" + +#. 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 "aio - введение в асинхронный ввод-вывод POSIX" + +#. 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 "" +"Интерфейс асинхронного ввода-вывода POSIX (AIO) позволяет приложениям " +"запускать одну или несколько операций ввода-вывода, которые выполняются " +"асинхронно (т. е., в фоновом режиме). Приложение может выбрать каким образом " +"оно будет уведомлено о завершении операции ввода-вывода: с помощью сигнала, " +"созданием новой нити или вообще не получать уведомления." + +#. 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 "Интерфейс POSIX AIO состоит из следующих функций:" + +#. 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 "B<aio_read>(3)" + +#. 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 "Ставит запрос на чтение в очередь. Это асинхронный аналог B<read>(2)." + +#. 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 "B<aio_write>(3)" + +#. 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 "Ставит запрос на запись в очередь. Это асинхронный аналог B<write>(2)." + +#. 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 "B<aio_fsync>(3)" + +#. 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 "" +"Ставит запрос синхронизации операций ввода-вывода над файловым дескриптором. " +"Это асинхронный аналог B<fsync>(2) и B<fdatasync>(2)." + +#. 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 "B<aio_error>(3)" + +#. 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 "B<aio_return>(3)" + +#. 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 "B<aio_suspend>(3)" + +#. 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 "B<aio_cancel>(3)" + +#. 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 "B<lio_listio>(3)" + +#. 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 "" +"В структуре I<aiocb> («блок управления асинхронным вводом-выводом») задаются " +"параметры, которые управляют операцией ввода-вывода. Аргумент данного типа " +"передаётся во все функции, перечисленные ранее. Данная структура имеет " +"следующий вид:" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, 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" +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 "" +" int aio_fildes; /* файловый дескриптор */\n" +" off_t aio_offset; /* файловое смещение */\n" +" volatile void *aio_buf; /* расположение буфера */\n" +" size_t aio_nbytes; /* длина передачи */\n" +" int aio_reqprio; /* приоритет запроса */\n" +" struct sigevent aio_sigevent; /* метод уведомления */\n" +" int aio_lio_opcode; /* выполняемая операция;\n" +" только в lio_listio() */\n" + +#. 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 "I<aio_fildes>" + +#. 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 "I<aio_offset>" + +#. 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 "I<aio_buf>" + +#. 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 "I<aio_nbytes>" + +#. 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 "Размер буфера, на который указывает I<aio_buf>." + +#. 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 "I<aio_reqprio>" + +#. 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 "" +"В этом поле задаётся значение, которое вычитается из приоритета реального " +"времени вызывающей нити, чтобы определить приоритет выполнения данного " +"запроса ввода-вывода (смотрите B<pthread_setschedparam>(3)). Указываемое " +"значение должно быть в диапазоне от 0 и до значения, возвращаемого " +"I<sysconf(_SC_AIO_PRIO_DELTA_MAX)>. Данное поле игнорируется при операциях " +"синхронизации файла." + +#. 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 "I<aio_sigevent>" + +#. type: Plain text +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, fuzzy +#| 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." +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 "" +"В этом поле задаётся структура, которая указывает как вызывающему должно " +"быть сообщено о завершении анонимной операции ввода-вывода. Возможные " +"значения для I<aio_sigevent.sigev_notify>: B<SIGEV_NONE>, B<SIGEV_SIGNAL> и " +"B<SIGEV_THREAD>. Подробности смотрите в B<sigevent>(7)." + +#. 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 "I<aio_lio_opcode>" + +#. 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 "" +"Задаёт тип операции, которая будет выполнена; используется только в " +"B<lio_listio>(3)." + +#. 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 "" +"В дополнении к стандартным функциям, перечисленным ранее, в библиотеке GNU C " +"есть следующее расширение программного интерфейса POSIX AIO:" + +#. 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 "B<aio_init>(3)" + +#. 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 "Позволяет изменить настройки поведения реализации glibc для POSIX AIO." + +#. 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 "B<EINVAL>" + +#. 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 "" +"Значение поля I<aio_reqprio> структуры I<aiocb> меньше 0 или больше, чем " +"значение ограничения, возвращаемое вызовом " +"I<sysconf(_SC_AIO_PRIO_DELTA_MAX)>." + +#. 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 "POSIX.1-2008." + +#. 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 +#, fuzzy +#| msgid "POSIX.1-2001." +msgid "POSIX.1-2001. glibc 2.1." +msgstr "POSIX.1-2001." + +#. 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 "" +"Желательно обнулять буфер блока управления перед использованием (смотрите " +"B<memset>(3)). Буфер блока управления и буфер, который задаётся в " +"I<aio_buf>, не должны изменяться во время выполнения операции ввода-вывода. " +"Данные буферы должны оставаться рабочими до завершения операции ввода-вывода." + +#. 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 "" +"Одновременное выполнение операций чтения или записи через совместно " +"используемую структуру I<aiocb> приводит к непредсказуемым результатам." + +#. 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 "" +"Имеющаяся реализация Linux POSIX AIO предоставляется glibc в " +"пользовательском пространстве. Она имеет ряд ограничений, наиболее " +"существенные из которых — затраты на сопровождение нескольких нитей при " +"операциях ввода-вывода и плохое масштабирование. Некогда для реализации " +"асинхронного ввода-вывода велась работа над ядерной реализацией на основе " +"машины состояний (смотрите B<io_submit>(2), B<io_setup>(2), " +"B<io_cancel>(2), B<io_destroy>(2), B<io_getevents>(2)), но эта реализация " +"ещё недостаточно стабильна в тех местах, где POSIX AIO можно было бы " +"полностью реализовать на системных вызовах ядра." + +#. 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 "" +"Представленная далее программа открывает все файлы, указанные в параметрах " +"командной строки и ставит в очередь запрос на полученные файловые " +"дескрипторы с помощью B<aio_read>(3). Затем программа входит в цикл, в " +"котором периодически следит за всеми выполняемыми операциями ввода-вывода с " +"помощью B<aio_error>(3). Для каждого запроса ввода-вывода настроено " +"получение уведомления посредством сигнала. После завершения всех запросов " +"ввода-вывода, программа возвращает их состояние с помощью B<aio_return>(3)." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy +#| msgid "" +#| "The B<SIGQUIT> signal (generated by typing control-\\e) causes the " +#| "program to request cancellation of each of the outstanding requests using " +#| "B<aio_cancel>(3)." +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 "" +"Сигнал B<SIGQUIT> (генерируемый нажатием control-\\e) заставляет программу " +"отменить все невыполненные запросы с помощью B<aio_cancel>(3)." + +#. 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 "" +"Вот результат работы программы. В этом примере программа ставит в очередь " +"два запроса для стандартного ввода, и они отрабатываются двумя введёнными " +"строками «abc» и «x»." + +#. 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 "" +"$ B<./a.out /dev/stdin /dev/stdin>\n" +"открыт /dev/stdin в дескрипторе 3\n" +"открыт /dev/stdin в дескрипторе 4\n" +"aio_error():\n" +" запрос 0 (дескриптор 3): выполняется\n" +" запрос 1 (дескриптор 4): выполняется\n" +"B<abc>\n" +"Получен сигнал завершения ввода-вывода\n" +"aio_error():\n" +" запрос 0 (дескриптор 3): ввод-вывод завершён\n" +" запрос 1 (дескриптор 4): выполняется\n" +"aio_error():\n" +" запрос 1 (дескриптор 4): выполняется\n" +"B<x>\n" +"Получен сигнал завершения ввода-вывода\n" +"aio_error():\n" +" запрос 1 (дескриптор 4): ввод-вывод завершён\n" +"Завершены все запросы ввода-вывода\n" +"aio_return():\n" +" запрос 0 (дескриптор 3): 4\n" +" запрос 1 (дескриптор 4): 2\n" + +#. 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 "" +"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)" + +#. 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 "" +"«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>" + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "2023-02-05" +msgstr "5 февраля 2023 г." + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "Linux man-pages 6.03" +msgstr "Linux man-pages 6.03" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "#include E<lt>aiocb.hE<gt>\n" +msgstr "#include E<lt>aiocb.hE<gt>\n" + +#. 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 "" +"struct aiocb {\n" +" /* Порядок данных полей определяется реализацией */\n" + +#. 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 "" +" int aio_fildes; /* файловый дескриптор */\n" +" off_t aio_offset; /* файловое смещение */\n" +" volatile void *aio_buf; /* расположение буфера */\n" +" size_t aio_nbytes; /* длина передачи */\n" +" int aio_reqprio; /* приоритет запроса */\n" +" struct sigevent aio_sigevent; /* метод уведомления */\n" +" int aio_lio_opcode; /* выполняемая операция;\n" +" только в lio_listio() */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* Various implementation-internal fields not shown */\n" +"};\n" +msgstr "" +" /* Не показаны различные поля, используемые в реализациях */\n" +"};\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "/* Operation codes for \\(aqaio_lio_opcode\\(aq: */\n" +msgid "/* Operation codes for \\[aq]aio_lio_opcode\\[aq]: */\n" +msgstr "/* Коды операций для \\(aqaio_lio_opcode\\(aq: */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "enum { LIO_READ, LIO_WRITE, LIO_NOP };\n" +msgstr "enum { LIO_READ, LIO_WRITE, LIO_NOP };\n" + +#. 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 "" +"В этом поле задаётся структура, которая указывает как вызывающему должно " +"быть сообщено о завершении анонимной операции ввода-вывода. Возможные " +"значения для I<aio_sigevent.sigev_notify>: B<SIGEV_NONE>, B<SIGEV_SIGNAL> и " +"B<SIGEV_THREAD>. Подробности смотрите в B<sigevent>(7)." + +#. type: SH +#: debian-bookworm +#, no-wrap +msgid "VERSIONS" +msgstr "ВЕРСИИ" + +#. type: Plain text +#: debian-bookworm +#, fuzzy +#| msgid "The POSIX AIO interfaces are provided by glibc since version 2.1." +msgid "The POSIX AIO interfaces are provided by glibc since glibc 2.1." +msgstr "Интерфейсы POSIX AIO появились в glibc в версии 2.1." + +#. type: Plain text +#: debian-bookworm +msgid "POSIX.1-2001, POSIX.1-2008." +msgstr "POSIX.1-2001, POSIX.1-2008." + +#. 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 "" +"#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" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "#define BUF_SIZE 20 /* Size of buffers for read operations */\n" +msgstr "#define BUF_SIZE 20 /* размер буферов для операций чтения */\n" + +#. 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 "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)\n" + +#. 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 "" +"struct ioRequest { /* определяемая приложением структура для \n" +" слежения за запросами ввода-вывода */\n" +" int reqNum;\n" +" int status;\n" +" struct aiocb *aiocbp;\n" +"};\n" + +#. 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 "" +"static volatile sig_atomic_t gotSIGQUIT = 0;\n" +" /* при получении SIGQUIT мы пытаемся отменить \n" +" все невыполненные запросы ввода-вывода */\n" + +#. 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 "" +"static void /* обработчик SIGQUIT */\n" +"quitHandler(int sig)\n" +"{\n" +" gotSIGQUIT = 1;\n" +"}\n" + +#. 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 "" +"#define IO_SIGNAL SIGUSR1 /* сигнал, уведомляющий о завершении\n" +" ввода-вывода */\n" + +#. 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 "" +"static void /* обработчик завершения ввода-вывода */\n" +"aioSigHandler(int sig, siginfo_t *si, void *ucontext)\n" +"{\n" +" if (si-E<gt>si_code == SI_ASYNCIO) {\n" +" write(STDOUT_FILENO, \"Получен сигнал завершения ввода-вывода\\en\", 31);\n" + +#. 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 "" +" /* соответствующая структура ioRequest была бы доступна как\n" +" struct ioRequest *ioReq = si-E<gt>si_value.sival_ptr;\n" +" а файловый дескриптор был бы доступен через\n" +" ioReq-E<gt>aiocbp-E<gt>aio_fildes */\n" +" }\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| "int\n" +#| "main(int argc, char *argv[])\n" +#| "{\n" +#| " struct ioRequest *ioList;\n" +#| " struct aiocb *aiocbList;\n" +#| " struct sigaction sa;\n" +#| " int s, j;\n" +#| " int numReqs; /* Total number of queued I/O requests */\n" +#| " int openReqs; /* Number of I/O requests still in progress */\n" +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 "" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" struct ioRequest *ioList;\n" +" struct aiocb *aiocbList;\n" +" struct sigaction sa;\n" +" int s, j;\n" +" int numReqs; /* общее количество устанавливаемых в очередь\n" +" запросов ввода-вывода */\n" +" int openReqs; /* количество выполняющихся запросов\n" +" ввода-вывода */\n" + +#. 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 "" +" if (argc E<lt> 2) {\n" +" fprintf(stderr, \"Использование: %s E<lt>имя_файлаE<gt> E<lt>имя_файлаE<gt>...\\en\",\n" +" argv[0]);\n" +" exit(EXIT_FAILURE);\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " numReqs = argc - 1;\n" +msgstr " numReqs = argc - 1;\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid " /* Allocate our arrays */\n" +msgid " /* Allocate our arrays. */\n" +msgstr " /* выделяем место под массивы */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " ioList = calloc(numReqs, sizeof(struct ioRequest));\n" +#| " if (ioList == NULL)\n" +#| " errExit(\"calloc\");\n" +msgid "" +" struct ioRequest *ioList = calloc(numReqs, sizeof(*ioList));\n" +" if (ioList == NULL)\n" +" errExit(\"calloc\");\n" +msgstr "" +" ioList = calloc(numReqs, sizeof(struct ioRequest));\n" +" if (ioList == NULL)\n" +" errExit(\"calloc\");\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " aiocbList = calloc(numReqs, sizeof(struct aiocb));\n" +#| " if (aiocbList == NULL)\n" +#| " errExit(\"calloc\");\n" +msgid "" +" struct aiocb *aiocbList = calloc(numReqs, sizeof(*aiocbList));\n" +" if (aiocbList == NULL)\n" +" errExit(\"calloc\");\n" +msgstr "" +" aiocbList = calloc(numReqs, sizeof(struct aiocb));\n" +" if (aiocbList == NULL)\n" +" errExit(\"calloc\");\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid " /* Establish handlers for SIGQUIT and the I/O completion signal */\n" +msgid " /* Establish handlers for SIGQUIT and the I/O completion signal. */\n" +msgstr " /* указываем обработчики SIGQUIT и сигнала завершения ввода-вывода */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" sa.sa_flags = SA_RESTART;\n" +" sigemptyset(&sa.sa_mask);\n" +msgstr "" +" sa.sa_flags = SA_RESTART;\n" +" sigemptyset(&sa.sa_mask);\n" + +#. 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 "" +" sa.sa_handler = quitHandler;\n" +" if (sigaction(SIGQUIT, &sa, NULL) == -1)\n" +" errExit(\"sigaction\");\n" + +#. 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 "" +" sa.sa_flags = SA_RESTART | SA_SIGINFO;\n" +" sa.sa_sigaction = aioSigHandler;\n" +" if (sigaction(IO_SIGNAL, &sa, NULL) == -1)\n" +" errExit(\"sigaction\");\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " /* Open each file specified on the command line, and queue\n" +#| " a read request on the resulting file descriptor */\n" +msgid "" +" /* Open each file specified on the command line, and queue\n" +" a read request on the resulting file descriptor. */\n" +msgstr "" +" /* открываем каждый файл, заданный в командной строке и ставим в\n" +" очередь запрос на чтение полученного файлового дескриптора */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " for (j = 0; j E<lt> numReqs; j++) {\n" +#| " ioList[j].reqNum = j;\n" +#| " ioList[j].status = EINPROGRESS;\n" +#| " ioList[j].aiocbp = &aiocbList[j];\n" +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 "" +" for (j = 0; j E<lt> numReqs; j++) {\n" +" ioList[j].reqNum = j;\n" +" ioList[j].status = EINPROGRESS;\n" +" ioList[j].aiocbp = &aiocbList[j];\n" + +#. 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 "" +" 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" + +#. 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 "" +" ioList[j].aiocbp-E<gt>aio_buf = malloc(BUF_SIZE);\n" +" if (ioList[j].aiocbp-E<gt>aio_buf == NULL)\n" +" errExit(\"malloc\");\n" + +#. 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 "" +" 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" + +#. 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 "" +" s = aio_read(ioList[j].aiocbp);\n" +" if (s == -1)\n" +" errExit(\"aio_read\");\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " openReqs = numReqs;\n" +msgstr " openReqs = numReqs;\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid " /* Loop, monitoring status of I/O requests */\n" +msgid " /* Loop, monitoring status of I/O requests. */\n" +msgstr " /* цикл, отслеживание состояние запросов ввода-вывода */\n" + +#. 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 "" +" while (openReqs E<gt> 0) {\n" +" sleep(3); /* задержка между проверками */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " if (gotSIGQUIT) {\n" +msgstr " if (gotSIGQUIT) {\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, 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 cancellation requests */\n" +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 "" +" /* при получении SIGQUIT пытаемся отменить каждый\n" +" невыполненный запрос ввода-вывода и показываем состояние,\n" +" возвращаемое при отмене запроса */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " printf(\"got SIGQUIT; canceling I/O requests: \\en\");\n" +msgstr " printf(\"получен SIGQUIT; отмена запросов ввода-вывода: \\en\");\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " for (j = 0; j E<lt> numReqs; j++) {\n" +#| " if (ioList[j].status == EINPROGRESS) {\n" +#| " printf(\" Request %d 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" +#| " errMsg(\"aio_cancel\");\n" +#| " }\n" +#| " }\n" +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 "" +" for (j = 0; j E<lt> numReqs; j++) {\n" +" if (ioList[j].status == EINPROGRESS) {\n" +" printf(\" запрос %d в дескриптор %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(\"ввод-вывод отменён\\en\");\n" +" else if (s == AIO_NOTCANCELED)\n" +" printf(\"ввод-вывод не отменён\\en\");\n" +" else if (s == AIO_ALLDONE)\n" +" printf(\"I/O all done\\en\");\n" +" else\n" +" errMsg(\"aio_cancel\");\n" +" }\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" gotSIGQUIT = 0;\n" +" }\n" +msgstr "" +" gotSIGQUIT = 0;\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " /* Check the status of each I/O request that is still\n" +#| " in progress */\n" +msgid "" +" /* Check the status of each I/O request that is still\n" +" in progress. */\n" +msgstr "" +" /* проверяем состояние каждого запроса ввода-вывода, которые\n" +" ещё не завершились */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " printf(\"aio_error():\\en\");\n" +#| " for (j = 0; j E<lt> numReqs; j++) {\n" +#| " if (ioList[j].status == EINPROGRESS) {\n" +#| " printf(\" for request %d (descriptor %d): \",\n" +#| " j, ioList[j].aiocbp-E<gt>aio_fildes);\n" +#| " ioList[j].status = aio_error(ioList[j].aiocbp);\n" +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 "" +" printf(\"aio_error():\\en\");\n" +" for (j = 0; j E<lt> numReqs; j++) {\n" +" if (ioList[j].status == EINPROGRESS) {\n" +" printf(\" запрос %d (дескриптор %d): \",\n" +" j, ioList[j].aiocbp-E<gt>aio_fildes);\n" +" ioList[j].status = aio_error(ioList[j].aiocbp);\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, 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" +#| " errMsg(\"aio_error\");\n" +#| " break;\n" +#| " }\n" +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 "" +" switch (ioList[j].status) {\n" +" case 0:\n" +" printf(\"ввод-вывод завершён\\en\");\n" +" break;\n" +" case EINPROGRESS:\n" +" printf(\"выполняется\\en\");\n" +" break;\n" +" case ECANCELED:\n" +" printf(\"отменён\\en\");\n" +" break;\n" +" default:\n" +" errMsg(\"aio_error\");\n" +" break;\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (ioList[j].status != EINPROGRESS)\n" +" openReqs--;\n" +" }\n" +" }\n" +" }\n" +msgstr "" +" if (ioList[j].status != EINPROGRESS)\n" +" openReqs--;\n" +" }\n" +" }\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " printf(\"All I/O requests completed\\en\");\n" +msgstr " printf(\"Завершены все запросы ввода-вывода\\en\");\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid " /* Check status return of all I/O requests */\n" +msgid " /* Check status return of all I/O requests. */\n" +msgstr " /* проверяем возвращаемое состояние всех запросов ввода-вывода */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " printf(\"aio_return():\\en\");\n" +#| " for (j = 0; j E<lt> numReqs; j++) {\n" +#| " ssize_t s;\n" +msgid "" +" printf(\"aio_return():\\en\");\n" +" for (size_t j = 0; j E<lt> numReqs; j++) {\n" +" ssize_t s;\n" +msgstr "" +" printf(\"aio_return():\\en\");\n" +" for (j = 0; j E<lt> numReqs; j++) {\n" +" ssize_t s;\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " s = aio_return(ioList[j].aiocbp);\n" +#| " printf(\" for request %d (descriptor %d): %zd\\en\",\n" +#| " j, ioList[j].aiocbp-E<gt>aio_fildes, s);\n" +#| " }\n" +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 "" +" s = aio_return(ioList[j].aiocbp);\n" +" printf(\" запрос %d (дескриптор %d): %zd\\en\",\n" +" j, ioList[j].aiocbp-E<gt>aio_fildes, s);\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" +" exit(EXIT_SUCCESS);\n" +"}\n" + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "2023-05-03" +msgstr "3 мая 2023 г." + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "Linux man-pages 6.05.01" +msgstr "Linux man-pages 6.05.01" + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "2023-03-30" +msgstr "30 марта 2023 г." + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "Linux man-pages 6.04" +msgstr "Linux man-pages 6.04" |