.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1980, 1991 Regents of the University of California. .\" All rights reserved. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" @(#)ioctl.2 6.4 (Berkeley) 3/10/91 .\" .\" Modified 1993-07-23 by Rik Faith .\" Modified 1996-10-22 by Eric S. Raymond .\" Modified 1999-06-25 by Rachael Munns .\" Modified 2000-09-21 by Andries Brouwer .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH ioctl 2 "13 czerwca 2024 r." "Linux man\-pages 6.9.1" .SH NAZWA ioctl \- steruje urządzeniem .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP) .SH SKŁADNIA .nf \fB#include \fP .P \fBint ioctl(int \fP\fIfd\fP\fB, unsigned long \fP\fIop\fP\fB, ...);\fP\f[R] /* glibc, BSD */\fR \fBint ioctl(int \fP\fIfd\fP\fB, int \fP\fIop\fP\fB, ...);\fP\f[R] /* musl, inny UNIX */\fR .fi .SH OPIS Wywołanie systemowe \fBioctl\fP manipuluje na podległych jej parametrach urządzeń, do których dostęp odbywa się poprzez pliki specjalne. W szczególności, za pomocą operacji \fBioctl\fP() można kontrolować wiele właściwości operacyjnych specjalnych plików znakowych (np. terminali). Argument \fIfd\fP musi być otwartym deskryptorem pliku. .P Drugi argument jest zależnym od urządzenia kodem operacji. Trzeci argument jest pozbawionym typu wskaźnikiem do obszaru pamięci, tradycyjnie \fBchar *\fP\fIargp\fP (pochodzi z okresu zanim \fBvoid *\fP stało się poprawne w C) i tak będzie nazywany w niniejszej dyskusji. .P \fIop\fP \fBIoctl\fP() zawiera w sobie zakodowaną informację czy argument jest parametrem \fIwejściowym\fP czy \fIwyjściowym\fP oraz rozmiar \fIargp\fP tego argumentu w bajtach. Makra i definicje, używane do przekazywania \fIop\fP do \fBioctl\fP(), znajdują się w pliku \fI\fP. Zobacz UWAGI .SH "WARTOŚĆ ZWRACANA" Zazwyczaj, po pomyślnym zakończeniu zwracane jest zero. Niektóre operacje \fBioctl\fP() używają zwracanej wartości jako parametru wyjściowego i zwracają wówczas pewną wartość nieujemną. Po błędzie zwracane jest \-1 i ustawiane \fIerrno\fP wskazując błąd. .SH BŁĘDY .TP \fBEBADF\fP \fIfd\fP nie jest prawidłowym deskryptorem pliku. .TP \fBEFAULT\fP \fIargp\fP wskazuje na niedostępny obszar pamięci. .TP \fBEINVAL\fP \fIop\fP lub \fIargp\fP są nieprawidłowe. .TP \fBENOTTY\fP \fIfd\fP nie jest związane z urządzeniem znakowym. .TP \fBENOTTY\fP Podana operacja nie ma zastosowania do obiektu, na który wskazuje deskryptor \fIfd\fP. .SH WERSJE Argumenty, zwracane wartości i semantyka \fBioctl\fP() 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 wejścia/wyjścia). .SH STANDARDY Brak. .SH HISTORIA Wersja\ 7 AT&T UNIX posiadała .PD 0 .in +4n .nf \fBioctl(int \fP\fIfildes\fP\fB, int \fP\fIop\fP\fB, struct sgttyb *\fP\fIargp\fP\fB);\fP .fi .in .P .PD (gdzie \fBstruct sgttyb\fP historycznie używane było przez \fBstty\fP(2) i \fBgtty\fP(2) i jest polimorficzne, zależnie od typu operacji (podobnie, jak byłoby \fBvoid *\fP, gdyby było dostępne)). .P SysIII dokumentuje \fIarg\fP bez żadnego typu. .P 4.3BSD miało .PD 0 .in +4n .nf \fBioctl(int \fP\fId\fP\fB, unsigned long \fP\fIop\fP\fB, char *\fP\fIargp\fP\fB);\fP .fi .in .P .PD (z \fBchar *\fP podobnie jak w przypadku \fBvoid *\fP). .P SysVr4 miało .PD 0 .in +4n .nf \fBint ioctl(int \fP\fIfildes\fP\fB, int \fP\fIop\fP\fB, ... /* \fP\fIarg\fP\fB */);\fP .fi .in .P .PD .SH UWAGI .\" Aby używać niniejszego wywołanie, konieczny jest otwarty deskryptor pliku. Często wywołanie \fBopen\fP(2) daje niepożądane skutki uboczne, którym pod Linuksem można zapobiec podając znacznik \fBO_NONBLOCK\fP. .SS "Struktura ioctl" .\" added two sections - aeb Wartości \fIop\fP ioctl są 32\-bitowymi stałymi. Generalnie stałe te są zupełnie przypadkowe, jednak niektórzy próbują je jakoś strukturyzować. .P Wcześniej, w Linuksie większość 16\-bitowych stałych składała się z ostatniego bajtu będącego numerem seryjnym i poprzedzającego go bajtu (bajtów) typu, który wskazuje sterownik. Czasem używany był numer główny: 0x03 do ioctl \fBHDIO_*\fP, 0x06 do ioctl \fBLP*\fP. Czasem używana była również litera (lub kilka) ASCII. Przykładowo \fBTCGETS\fP ma wartość 0x00005401, z 0x54 = \[Bq]T\[rq] wskazującym sterownik terminala, a \fBCYGETTIMEOUT\fP ma wartość 0x00435906, gdzie 0x43 0x59 = \[Bq]C\[rq] \[Bq]Y\[rq] wskazuje sterownik cyclades. .P Później (0.98p5) wbudowano w numer nieco więcej informacji. Miał on 2 bity kierunku (00: brak, 01: zapis, 10: odczyt, 11: odczyt/zapis), po których następowało 14 bitów rozmiaru (wskazujących rozmiar argumentu), po których następował 8\-bitowy typ (zbierający ioctl\-e w grupy wg wspólnego zastosowania lub wspólnego sterownika) i 8\-bitowy numer seryjny. .P Makra opisujące tę strukturę istnieją w \fI\fP i są to \fB_IO(type,nr)\fP oraz \fB{_IOR,_IOW,_IOWR}(type,nr,size)\fP. Używają \fIsizeof(size)\fP, tak więc rozmiar (\fBsize\fP) jest tu błędną nazwą: trzeci argument jest typem danych. .P Proszę zauważyć, że bity rozmiaru są bardzo niepewne: w wielu przypadkach są nieprawidłowe, albo ze względu na błędne makra używające \fIsizeof(sizeof(struct))\fP, albo ze względu na przestarzałe wartości. .P Wszystko wskazuje zatem na to, że nowa struktura ma same wady: nie pomaga w sprawdzaniu, a powoduje zróżnicowanie wartości na różnych architekturach. .SH "ZOBACZ TAKŻE" .\" .BR mt (4), \fBexecve\fP(2), \fBfcntl\fP(2), \fBioctl_console\fP(2), \fBioctl_fat\fP(2), \fBioctl_fs\fP(2), \fBioctl_fsmap\fP(2), \fBioctl_nsfs\fP(2), \fBioctl_tty\fP(2), \fBioctl_userfaultfd\fP(2), \fBioctl_eventpoll\fP(2), \fBopen\fP(2), \fBsd\fP(4), \fBtty\fP(4) .PP .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys , Andrzej Krzysztofowicz i Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .