.\" -*- 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 <faith@cs.unc.edu>
.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified 1999-06-25 by Rachael Munns <vashti@dream.org.uk>
.\" Modified 2000-09-21 by Andries Brouwer <aeb@cwi.nl>
.\"
.\"*******************************************************************
.\"
.\" 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 <sys/ioctl.h>\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<sys/ioctl.h>\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<asm/ioctl.h>\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
Tłumaczenie niniejszej strony podręcznika:
Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.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 .
