Provided by: manpages-ru-dev_4.18.1-1_all bug

ИМЯ

       outb,  outw,  outl,  outsb, outsw, outsl, inb, inw, inl, insb, insw, insl, outb_p, outw_p,
       outl_p, inb_p, inw_p, inl_p - ввод/вывод в порт

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <sys/io.h>

       unsigned char inb(unsigned short port);
       unsigned char inb_p(unsigned short port);
       unsigned short inw(unsigned short port);
       unsigned short inw_p(unsigned short port);
       unsigned int inl(unsigned short port);
       unsigned int inl_p(unsigned short port);

       void outb(unsigned char value, unsigned short port);
       void outb_p(unsigned char value, unsigned short port);
       void outw(unsigned short value, unsigned short port);
       void outw_p(unsigned short value, unsigned short port);
       void outl(unsigned int value, unsigned short port);
       void outl_p(unsigned int value, unsigned short port);

       void insb(unsigned short port, void addr[.count],
                  unsigned long count);
       void insw(unsigned short port, void addr[.count],
                  unsigned long count);
       void insl(unsigned short port, void addr[.count],
                  unsigned long count);
       void outsb(unsigned short port, const void addr[.count],
                  unsigned long count);
       void outsw(unsigned short port, const void addr[.count],
                  unsigned long count);
       void outsl(unsigned short port, const void addr[.count],
                  unsigned long count);

ОПИСАНИЕ

       Это семейство вызовов используется  для  низкоуровневой  работы  с  портами  ввода/вывода.
       Вызовы  out*  выполняют  запись  в  порт, а вызовы in* выполняют чтение из порта; вызовы с
       суффиксом b работают с данными шириной один байт,  а  вызовы  с  суффиксом  w  работают  с
       данными шириной в одно слово; вызовы с суффиксом _p ждут завершения операции ввода-вывода.

       В  основном,  они  предназначены для использования внутри ядра, но могут быть вызваны и из
       пользовательского пространства.

       Вы должны скомпилировать свою программу с флагами -O, -O2 и им  подобными.  Данные  вызовы
       определены в виде встроенных макросов и не будут подставляться без включённой оптимизации,
       что приводит к появлению неразрешаемых ссылок в процессе компоновки программы.

       Для того, чтобы запросить у ядра разрешение доступа к портам ввода-вывода  из  приложения,
       работающего в пользовательском пространстве, используйте ioperm(2) или iopl(2). Если этого
       не сделать, приложение получит сообщение об ошибке сегментации.

СТАНДАРТЫ

       Вызовы  outb()  и  ему  подобные  зависят  от  конкретного  оборудования.  Аргумент  value
       передаётся  первым,  а  port  —  вторым,  что  является  обратным  порядком по сравнению с
       большинством реализаций этих вызовов в DOS.

СМ. ТАКЖЕ

       ioperm(2), iopl(2)

ПЕРЕВОД

       Русский   перевод   этой    страницы    руководства    был    сделан    Azamat    Hackimov
       <azamat.hackimov@gmail.com>,  Konstantin  Shvaykovskiy  <kot.shv@gmail.com>,  Yuri  Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.