oracular (2) ioctl.2.gz

Provided by: manpages-ro-dev_4.23.1-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_ficlone(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)

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.