Provided by: manpages-pl-dev_4.14.0-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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.