jammy (2) ioctl.2.gz

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 ⟨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⟩.