Provided by: manpages-pl-dev_4.13-4_all bug

NAZWA

       ioctl - sterowanie urządzeniem

SKŁADNIA

       #include <sys/ioctl.h>

       int ioctl(int fd, unsigned long request, ...);

OPIS

       Wywołanie systemowe ioctl manipuluje na podległych jej parametrach urządzeń, do których dostęp odbywa się
       poprzez  pliki  specjalne.  W  szczególności, za pomocą żądań ioctl() można kontrolować wiele właściwości
       operacyjnych specjalnych plików znakowych (np. terminali). Argument fd  musi  być  otwartym  deskryptorem
       pliku.

       Drugi  argument  jest  zależnym  od  urządzenia  kodem  polecenia.  Trzeci argument jest pozbawionym typu
       wskaźnikiem do obszaru pamięci, tradycyjnie char *argp (pochodzi z okresu zanim void * stało się poprawne
       w C) i tak będzie nazywany w niniejszej dyskusji.

       Ioctl() request zawiera w sobie  zakodowaną  informację  czy  argument  jest  parametrem  wejściowym  czy
       wyjściowym  oraz  rozmiar  argp  tego  argumentu  w  bajtach. Makra i definicje, używane do przekazywania
       request do ioctl(), znajdują się w pliku <sys/ioctl.h>. Zobacz UWAGI

WARTOŚĆ ZWRACANA

       Zazwyczaj, po pomyślnym zakończeniu zwracane  jest  zero.  Niektóre  żądania  ioctl()  używają  zwracanej
       wartości  jako parametru wyjściowego i zwracają wówczas pewną wartość nieujemną. Po błędzie zwracane jest
       -1 i odpowiednio ustawiane errno.

BŁĘDY

       EBADF  fd nie jest prawidłowym deskryptorem pliku.

       EFAULT argp wskazuje na niedostępny obszar pamięci.

       EINVAL request lub argp są nieprawidłowe.

       ENOTTY fd nie jest związane z urządzeniem znakowym.

       ENOTTY Podane żądanie nie ma zastosowania dla obiektu, na który wskazuje deskryptor fd.

ZGODNE Z

       Brak jednego standardu. Argumenty, zwracane wartości i semantyka  ioctl()  różnią  się  w  zależności  od
       sterownika  urządzenia,  którego dotyczą (wywołanie jest używane jako uniwersalne dla operacji, które nie
       dają się ładnie dopasować do uniksowego modelu strumieni we/wy).

       Funkcja ioctl() pojawiła się w wersji 7 AT&T UNIX.

UWAGI

       In order to use this call, one needs an open file descriptor.  Often the open(2)  call has unwanted  side
       effects, that can be avoided under Linux by giving it the O_NONBLOCK flag.

   ioctl structure
       Ioctl  command  values  are 32-bit constants.  In principle these constants are completely arbitrary, but
       people have tried to build some structure into them.

       The old Linux situation was that of mostly 16-bit constants, where the last byte is a serial number,  and
       the  preceding  byte(s) give a type indicating the driver.  Sometimes the major number was used: 0x03 for
       the HDIO_* ioctls, 0x06 for the LP* ioctls.  And sometimes one or more  ASCII  letters  were  used.   For
       example,  TCGETS  has  value 0x00005401, with 0x54 = 'T' indicating the terminal driver, and CYGETTIMEOUT
       has value 0x00435906, with 0x43 0x59 = 'C' 'Y' indicating the cyclades driver.

       Later (0.98p5) some more information was built into the number.  One has 2 direction bits (00: none,  01:
       write, 10: read, 11: read/write)  followed by 14 size bits (giving the size of the argument), followed by
       an  8-bit  type  (collecting  the ioctls in groups for a common purpose or a common driver), and an 8-bit
       serial number.

       The   macros   describing   this   structure   live   in   <asm/ioctl.h>   and   are   _IO(type,nr)   and
       {_IOR,_IOW,_IOWR}(type,nr,size).   They  use  sizeof(size)  so  that  size is a misnomer here: this third
       argument is a data type.

       Note that the size bits are very unreliable: in lots of cases they are wrong,  either  because  of  buggy
       macros using sizeof(sizeof(struct)), or because of legacy values.

       Thus,  it  seems  that  the  new  structure only gave disadvantages: it does not help in checking, but it
       causes varying values for the various architectures.

ZOBACZ TAKŻE

       execve(2),  fcntl(2),  ioctl_console(2),  ioctl_fat(2),  ioctl_ficlonerange(2),   ioctl_fideduperange(2),
       ioctl_fslabel(2),  ioctl_getfsmap(2),  ioctl_iflags(2),  ioctl_ns(2), ioctl_tty(2), ioctl_userfaultfd(2),
       open(2), sd(4), tty(4)

O STRONIE

       Angielska wersja tej strony pochodzi z wydania 5.10 projektu Linux man-pages. Opis  projektu,  informacje
       dotyczące   zgłaszania   błędów   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod   adresem
       https://www.kernel.org/doc/man-pages/.

T◈UMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Przemek  Borys  <pborys@dione.ids.pl>,
       Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3  lub  nowszej.   Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej manpages-pl-
       list@lists.sourceforge.net.

Linux                                          11 kwietnia 2020 r.                                      IOCTL(2)