.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1980, 1991 Regents of the University of California. .\" All rights reserved. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" %%%LICENSE_END .\" .\" @(#)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 "11 апреля 2020 г." Linux "Руководство программиста Linux" .SH ИМЯ ioctl \- управляет устройством .SH СИНТАКСИС \fB#include \fP .PP .\" POSIX says 'request' is int, but glibc has the above .\" See https://bugzilla.kernel.org/show_bug.cgi?id=42705 \fBint ioctl(int \fP\fIfd\fP\fB, unsigned long \fP\fIrequest\fP\fB, ...);\fP .SH ОПИСАНИЕ Системный вызов \fBioctl\fP() изменяет параметры нижележащего устройства специальных файлов. В частности, через запросы \fBioctl\fP() можно управлять многими оперативными характеристиками специальных символьных файлов (например, терминалов). В качестве аргумента \fIfd\fP должен быть указан открытый файловый дескриптор. .PP Второй аргумент является кодом запроса, значение которого зависит от устройства. Третий аргумент является нетипизированным указателем на память. Обычно, это \fBchar *\fP\fIargp\fP (было до тех пор, пока в C не появился v\fBvoid *\fP) и далее он будет называться именно так. .PP An \fBioctl\fP() \fIrequest\fP has encoded in it whether the argument is an \fIin\fP parameter or \fIout\fP parameter, and the size of the argument \fIargp\fP in bytes. Macros and defines used in specifying an \fBioctl\fP() \fIrequest\fP are located in the file \fI\fP. See NOTES. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Обычно, при успешном завершении возвращается ноль. В некоторых \fBioctl\fP() запросах возвращаемое значение считается выходным параметром и при успешном завершении возвращается неотрицательное значение. В случае ошибки возвращается \-1 и значение \fIerrno\fP устанавливается соответствующим образом. .SH ОШИБКИ .TP \fBEBADF\fP Значение \fIfd\fP не является правильным файловым дескриптором. .TP \fBEFAULT\fP \fIargp\fP ссылается на недоступную область памяти. .TP \fBEINVAL\fP Неправильное значение \fIrequest\fP или \fIargp\fP. .TP \fBENOTTY\fP Значение \fIfd\fP не связано со специальным символьным устройством. .TP \fBENOTTY\fP Указанный запрос не применяется к типу объекта, на который ссылается файловый дескриптор \fIfd\fP. .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" Нет единого стандарта. Аргументы, возвращаемые значения и семантика \fBioctl\fP() варьируются в соответствии с драйвером устройства (вызов, используемый как всеохватывающий, не полностью соответствует потоковой модели ввода/вывода в UNIX). .PP The \fBioctl\fP() system call appeared in Version 7 AT&T UNIX. .SH ЗАМЕЧАНИЯ .\" Чтобы использовать этот вызов требуется открытый файловый дескриптор. Часто вызов \fBopen\fP(2) приводит к нежелательным эффектам, которых в Linux можно избежать указав флаг \fBO_NONBLOCK\fP. .SS "Структура ioctl" .\" added two sections - aeb Значения команд ioctl являются 32\-битными константами. В принципе, эти константы являются полностью случайными, но некоторые люди пытаются увидеть в них определённую закономерность. .PP В старом Linux, в основном, были 16\-битные константы, в которых последний байт является серийным номером, а предшествующим байт(ами) указывался драйвер. Иногда использовался старший номер устройства: 0x03 для ioctl вызовов \fBHDIO_*\fP, 0x06 для ioctl вызовов \fBLP*\fP. Иногда использовались одна или несколько букв ASCII. Например, \fBTCGETS\fP имеет значение 0x00005401, с буквой 0x54 = \(aqT\(aq, указывающей на драйвер терминала и \fBCYGETTIMEOUT\fP имеет значение 0x00435906, с буквами 0x43 0x59 = \(aqC\(aq \(aqY\(aq, указывающими на драйвер cyclades. .PP Позже (0.98p5) в номер была встроена дополнительная информация. Появилось 2 бита направления (00: нет, 01: запись, 10: чтение, 11: чтение/запись), за которыми следовали 14 бит размера (указывают размер аргумента), за которыми следовали 8 бит типа (собирающих вызовы ioctl в группы по назначению или общему драйверу) и, наконец, 8 бит серийного номера. .PP Макросы, описывающие эту структуру, расположены в \fI\fP, \fB_IO(type,nr)\fP и \fB{_IOR,_IOW,_IOWR}(type,nr,size)\fP. Они используют \fIsizeof(size)\fP, так что говорить о размере здесь является неправильным \(em это третий параметр типа данных. .PP Заметим, что биты размера очень ненадёжны: во многих случаях они ошибочны или потому что ошибочный макрос использует \fIsizeof(sizeof(struct))\fP или потому что таковы унаследованные значение. .PP Таким образом, мы видим, что новая структура имеет только недостатки: она не помогает в проверке, и приводит к различным значениям у разных архитектур. .SH "СМ. ТАКЖЕ" .\" .BR mt (4), \fBexecve\fP(2), \fBfcntl\fP(2), \fBioctl_console\fP(2), \fBioctl_fat\fP(2), \fBioctl_ficlonerange\fP(2), \fBioctl_fideduperange\fP(2), \fBioctl_fslabel\fP(2), \fBioctl_getfsmap\fP(2), \fBioctl_iflags\fP(2), \fBioctl_ns\fP(2), \fBioctl_tty\fP(2), \fBioctl_userfaultfd\fP(2), \fBopen\fP(2), \fBsd\fP(4), \fBtty\fP(4) .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitriy S. Seregin , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .