Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       ioctl - controlează dispozitivul

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <sys/ioctl.h>

       int ioctl(int fd, unsigned long op, ...);  /* glibc, BSD */
       int ioctl(int fd, int op, ...);            /* musl, alte UNIX */

DESCRIERE

       Apelul  de  sistem  ioctl()  manipulează  parametrii  de dispozitiv subiacente ai fișierelor speciale. În
       special, multe dintre caracteristicile de funcționare ale fișierelor speciale de caractere  (de  exemplu,
       terminale)  pot fi controlate cu ajutorul operațiilor ioctl(). Argumentul fd trebuie să fie un descriptor
       de fișier deschis.

       Al doilea argument este un cod de operație care depinde de dispozitiv. Cel de-al treilea argument este un
       indicator de memorie fără tip. În mod tradițional, este char *argp (din zilele de dinainte ca void  *  să
       fie valabil în C) și va fi numit astfel pentru această discuție.

       O  operație, „op” ioctl() are codificată în ea însăși dacă argumentul este un parametru de intrare sau un
       parametru de ieșire, precum și dimensiunea argumentului argp în  octeți.  Macrocomenzile  și  definițiile
       utilizate în specificarea unei cerer ioctl() sunt localizate în fișierul <sys/ioctl.h>. A se vedea NOTE.

VALOAREA RETURNATĂ

       De obicei, în caz de succes, se returnează zero. Câteva operații ioctl() utilizează valoarea de returnare
       ca  parametru  de  ieșire  și  returnează  o  valoare  nenegativă  în caz de succes. În caz de eroare, se
       returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

       EBADF  descriptor-fișier nu este un descriptor de fișier valid.

       EFAULT argp face referire la o zonă de memorie inaccesibilă.

       EINVAL op (operația) sau argp nu sunt valide.

       ENOTTY fd nu este asociat cu un dispozitiv special de caractere.

       ENOTTY Operația specificată nu se aplică tipului de obiect la care face referire descriptorul  de  fișier
              fd.

VERSIUNI

       Argumentele,  returnările  și  semantica  lui  ioctl() variază în funcție de controlorul de dispozitiv în
       cauză (apelul este utilizat ca o soluție de tip „catch-all” (capturează-tot) pentru operațiile care nu se
       încadrează în mod clar în modelul fluxului de In/Ieș UNIX).

STANDARDE

       Niciunul.

ISTORIC

       AT&T UNIX versiunea 7 are
           ioctl(int fildes, int op, struct sgttyb *argp);
       (unde struct sgttyb a fost folosită istoric de stty(2) și gtty(2) și este polimorfă în funcție  de  tipul
       de operație (așa cum ar fi fost un void *, dacă ar fi fost disponibil)).

       SysIII documentează arg fără niciun tip.

       4.3BSD are
           ioctl(int d, unsigned long op, char *argp);
       (cu char * în mod similar cu void *).

       SysVr4 are
           int ioctl(int fildes, int op, ... /* arg */);

NOTE

       Pentru  a  utiliza acest apel, este nevoie de un descriptor de fișier deschis. Adesea, apelul open(2) are
       efecte secundare nedorite, care pot fi evitate în Linux prin aplicarea fanionului O_NONBLOCK.

   structura ioctl
       Valorile operației, „op” ioctl sunt constante pe 32 de biți. În principiu, aceste constante sunt  complet
       arbitrare, dar oamenii au încercat să le construiască o anumită structură.

       Vechea  situație din Linux era cea a constantelor pe 16 biți, în care ultimul octet este un număr serial,
       iar octetul (octeții) precedent(i) oferă un tip  care  indică  controlorul.  Uneori  se  folosea  numărul
       principal:  0x03 pentru ioctl-urile HDIO_*, 0x06 pentru ioctl-urile LP*. Iar uneori erau folosite una sau
       mai multe litere ASCII. De exemplu, TCGETS are valoarea 0x00005401, cu 0x54 =  „T”  indicând  controlorul
       terminalului,  iar  CYGETTIMEOUT  are valoarea 0x00435906, cu 0x43 0x59 = „C” „Y” indicând controlorul de
       „cyclades”.

       Mai târziu (0.98p5), în număr au fost introduse mai multe informații. Unul are 2 biți  de  direcție  (00:
       niciunul,  01:  scriere,  10:  citire,  11:  citire/scriere),  urmat  de  14 biți de dimensiune (care dau
       dimensiunea argumentului), urmat de un tip pe 8 biți (care colectează ioctl-urile în  grupuri  pentru  un
       scop comun sau un controlor comun) și un număr de serie pe 8 biți.

       Macrocomenzile  care  descriu  această  structură  se  află  în  <asm/ioctl.h>  și  sunt  _IO(tip,nr)  și
       {_IOR,_IOW,_IOWR}(tip,nr,dimensiune). Acestea utilizează sizeof(size), astfel încât „size”  (dimensiunea)
       este un termen greșit aici: acest al treilea argument este un tip de date.

       Rețineți  că  biții  de dimensiune sunt foarte nesiguri: în multe cazuri sunt greșiți, fie din cauza unor
       macroprograme cu erori care utilizează sizeof(sizeof(struct)), fie din cauza valorilor vechi.

       Astfel, se pare că noua structură a oferit doar dezavantaje: nu ajută la verificare, dar determină valori
       diferite pentru diferitele arhitecturi.

CONSULTAȚI ȘI

       execve(2),  fcntl(2),  ioctl_console(2),  ioctl_fat(2),   ioctl_fs(2),   ioctl_fsmap(2),   ioctl_nsfs(2),
       ioctl_tty(2), ioctl_userfaultfd(2), ioctl_eventpoll(2), open(2), sd(4), tty(4)

TRADUCERE

       Traducerea    în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel   Chelu
       <remusgabriel.chelu@disroot.org>

       Această traducere este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3  sau  o
       versiune   ulterioară   cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se  asumă  NICIO
       RESPONSABILITATE.

       Dacă găsiți erori în traducerea acestui manual, vă rugăm să  trimiteți  un  e-mail  la  translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                   13 iunie 2024                                         ioctl(2)