.\" -*- mode: troff; coding: UTF-8 -*-
.\" Copyright (c) 1996 Andries Brouwer (aeb@cwi.nl)
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, see
.\" .
.\" %%%LICENSE_END
.\"
.\" 5 Oct 2002, Modified by Michael Kerrisk
.\" Updated for POSIX.1 2001
.\" 2004-12-17 Martin Schulze , mtk
.\" Removed errno declaration prototype, added notes
.\" 2006-02-09 Kurt Wall, mtk
.\" Added non-POSIX errors
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH ERRNO 3 2016\-03\-15 "" "Руководство программиста Linux"
.SH ИМЯ
errno \- код последней ошибки
.SH ОБЗОР
.\".sp
.\".BI "extern int " errno ;
\fB#include \fP
.SH ОПИСАНИЕ
В заголовочном файле \fI\fP определяется целочисленная
переменная \fIerrno\fP, которая используется системными вызовами и некоторыми
библиотечными функциями при ошибках для указания того, что именно
произошло. Её значение имеет смысл только тогда, когда вызов возвратил
ошибку (т.е., \-1 для большинства системных вызовов или NULL — для
большинства библиотечных функций); при успешном выполнении функции также
\fIмогут\fP менять значение \fIerrno\fP.
Допускаемые номера ошибок не равны нулю; значение \fIerrno\fP никогда не
устанавливается в ноль какими\-либо системными вызовами или библиотечными
функциями.
Некоторые системные вызовы или библиотечные функции (например,
\fBgetpriority\fP(2)), при успешном выполнении возвращают \-1. В этих случаях
успешность выполнения можно отличить от ошибки присвоив \fIerrno\fP значение
нуля перед вызовом, и затем, если вызов вернул состояние, которое может
указывать на ошибку, проверить, равно ли \fIerrno\fP ненулевому значению.
Переменная \fIerrno\fP определена в стандарте ISO C как изменяемое lvalue
\fIint\fP и не объявляемая явно; \fIerrno\fP может быть и макросом. Переменная
\fIerrno\fP является локальным значением нити; её изменение в одной нити не
влияет на её значение в другой нити.
Всем названиям ошибок, определённым в POSIX.1, должны соответствовать разные
значения, за исключением \fBEAGAIN\fP и \fBEWOULDBLOCK\fP, которые могут быть
одинаковыми.
.\" The following is now
.\" POSIX.1 (2001 edition) lists the following symbolic error names. Of
.\" these, \fBEDOM\fP and \fBERANGE\fP are in the ISO C standard. ISO C
.\" Amendment 1 defines the additional error number \fBEILSEQ\fP for
.\" coding errors in multibyte or wide characters.
.\"
.\" FIXME This list should be updated for POSIX.1-2008
Далее приведён список символических имён ошибок, определённых в
Linux. Некоторые из них, отмеченные как \fIPOSIX.1\fP, определены в
POSIX.1\-2001, а отмеченные как \fIC99\fP — определены в C99.
.TP 16
\fBE2BIG\fP
Слишком длинный список параметров\ (POSIX.1)
.TP
\fBEACCES\fP
Доступ запрещён (POSIX.1)
.TP
\fBEADDRINUSE\fP
Адрес уже используется (POSIX.1)
.TP
\fBEADDRNOTAVAIL\fP
.\" EADV is only an error on HURD(?)
Адрес недоступен (POSIX.1)
.TP
\fBEAFNOSUPPORT\fP
Семейство адресов не поддерживается (POSIX.1)
.TP
\fBEAGAIN\fP
Ресурс временно недоступен (значение может быть равным \fBEWOULDBLOCK\fP)
(POSIX.1)
.TP
\fBEALREADY\fP
Соединение уже выполняется (POSIX.1)
.TP
\fBEBADE\fP
Некорректный обмен
.TP
\fBEBADF\fP
Неправильный дескриптор файла (POSIX.1)
.TP
\fBEBADFD\fP
Некорректное состояние дескриптора файла
.TP
\fBEBADMSG\fP
Неправильное сообщение (POSIX.1)
.TP
\fBEBADR\fP
Неверный дескриптор запроса
.TP
\fBEBADRQC\fP
Неверный код запроса
.TP
\fBEBADSLT\fP
.\" EBFONT is defined but appears not to be used by kernel or glibc.
Некорректный слот
.TP
\fBEBUSY\fP
Устройство или ресурс занято (POSIX.1)
.TP
\fBECANCELED\fP
Операция отменена (POSIX.1)
.TP
\fBECHILD\fP
Отсутствуют дочерние процессы (POSIX.1)
.TP
\fBECHRNG\fP
Номер канала вне диапазона
.TP
\fBECOMM\fP
Ошибка связи при отправке
.TP
\fBECONNABORTED\fP
Соединение было прервано (POSIX.1)
.TP
\fBECONNREFUSED\fP
В соединении отказано (POSIX.1)
.TP
\fBECONNRESET\fP
Соединение сброшено другой стороной (POSIX.1)
.TP
\fBEDEADLK\fP
Предотвращена тупиковая ситуация при обращении к ресурсу (POSIX.1)
.TP
\fBEDEADLOCK\fP
Синоним \fBEDEADLK\fP
.TP
\fBEDESTADDRREQ\fP
Требуется указать адрес назначения (POSIX.1)
.TP
\fBEDOM\fP
.\" EDOTDOT is defined but appears to be unused
Математический аргумент вне области определения функции (POSIX.1, C99)
.TP
\fBEDQUOT\fP
.\" POSIX just says "Reserved"
Превышена дисковая квота (POSIX.1)
.TP
\fBEEXIST\fP
Файл существует (POSIX.1)
.TP
\fBEFAULT\fP
Неправильный адрес (POSIX.1)
.TP
\fBEFBIG\fP
Файл слишком велик (POSIX.1)
.TP
\fBEHOSTDOWN\fP
Узел выключен
.TP
\fBEHOSTUNREACH\fP
Узел недоступен (POSIX.1)
.TP
\fBEIDRM\fP
Идентификатор удалён (POSIX.1)
.TP
\fBEILSEQ\fP
Недопустимая последовательность байт (POSIX.1, C99)
.TP
\fBEINPROGRESS\fP
Операция выполняется (POSIX.1)
.TP
\fBEINTR\fP
Прерванный вызов функции (POSIX.1); смотрите \fBsignal\fP(7).
.TP
\fBEINVAL\fP
Неверный аргумент (POSIX.1)
.TP
\fBEIO\fP
Ошибка ввода/вывода (POSIX.1)
.TP
\fBEISCONN\fP
Сокет подключён (POSIX.1)
.TP
\fBEISDIR\fP
Это каталог (POSIX.1)
.TP
\fBEISNAM\fP
Является файлом именованного типа
.TP
\fBEKEYEXPIRED\fP
Ключ с истёкшим сроком
.TP
\fBEKEYREJECTED\fP
Ключ был отвергнут службой
.TP
\fBEKEYREVOKED\fP
Ключ был отозван
.TP
\fBEL2HLT\fP
Уровень 2 остановлен
.TP
\fBEL2NSYNC\fP
Уровень 2 не синхронизирован
.TP
\fBEL3HLT\fP
Уровень 3 остановлен
.TP
\fBEL3RST\fP
Уровень 3 остановлен
.TP
\fBELIBACC\fP
Невозможно получить доступ к нужной общей библиотеке
.TP
\fBELIBBAD\fP
Обращение к повреждённой общей библиотеке
.TP
\fBELIBMAX\fP
Попытка компоновки с слишком большим количеством общих библиотек
.TP
\fBELIBSCN\fP
Секция lib в a.out повреждена
.TP
\fBELIBEXEC\fP
Невозможно непосредственно выполнить общую библиотеку
.TP
\fBELOOP\fP
.\" ELNRNG is defined but appears to be unused
Слишком много уровней символьных ссылок (POSIX.1)
.TP
\fBEMEDIUMTYPE\fP
Неправильный тип носителя
.TP
\fBEMFILE\fP
Слишком много открытых файлов (POSIX.1); обычно, это из\-за превышения
ограничения ресурса \fBRLIMIT_NOFILE\fP, описанного в \fBgetrlimit\fP(2)
.TP
\fBEMLINK\fP
Слишком много ссылок (POSIX.1)
.TP
\fBEMSGSIZE\fP
Сообщение слишком длинное (POSIX.1)
.TP
\fBEMULTIHOP\fP
.\" POSIX says "Reserved"
Попытка Multihop (POSIX.1)
.TP
\fBENAMETOOLONG\fP
.\" ENAVAIL is defined, but appears not to be used
Название файла слишком длинное (POSIX.1)
.TP
\fBENETDOWN\fP
Сеть не работает (POSIX.1)
.TP
\fBENETRESET\fP
Соединение прервано из\-за сети (POSIX.1)
.TP
\fBENETUNREACH\fP
Сеть недоступна (POSIX.1)
.TP
\fBENFILE\fP
.\" ENOANO is defined but appears to be unused.
Слишком много открытых файлов в системе (POSIX.1); в Linux это, вероятно
результат достижения ограничения \fI/proc/sys/fs/file\-max\fP (смотрите
\fBproc\fP(5)).
.TP
\fBENOBUFS\fP
.\" ENOCSI is defined but appears to be unused.
Недостаточно буферного пространства (POSIX.1 (часть XSI STREAMS))
.TP
\fBENODATA\fP
Сообщение в голове очереди чтения STREAM отсутствует (POSIX.1)
.TP
\fBENODEV\fP
Нет такого устройства (POSIX.1)
.TP
\fBENOENT\fP
Нет такого файла или каталога (POSIX.1)
Обычно, эта ошибка является результатом указания несуществующего пути или
отсутствия одного из компонентов каталогов пути, или указанный путь является
символической ссылкой на несуществующий объект.
.TP
\fBENOEXEC\fP
Ошибка формата выполняемого файла (POSIX.1)
.TP
\fBENOKEY\fP
Требуемый ключ недоступен
.TP
\fBENOLCK\fP
Нет доступных блокировок (POSIX.1)
.TP
\fBENOLINK\fP
.\" POSIX says "Reserved"
Соединение было разорвано (POSIX.1)
.TP
\fBENOMEDIUM\fP
Носитель не найден
.TP
\fBENOMEM\fP
Недостаточно места (POSIX.1)
.TP
\fBENOMSG\fP
Нет сообщения желаемого типа (POSIX.1)
.TP
\fBENONET\fP
Машина не в сети
.TP
\fBENOPKG\fP
Пакет не установлен
.TP
\fBENOPROTOOPT\fP
Протокол недоступен (POSIX.1)
.TP
\fBENOSPC\fP
На устройстве не осталось места (POSIX.1)
.TP
\fBENOSR\fP
Отсутствую ресурсы STREAM (POSIX.1 (часть XSI STREAMS))
.TP
\fBENOSTR\fP
Нет STREAM (POSIX.1 (часть XSI STREAMS))
.TP
\fBENOSYS\fP
Функция не реализована (POSIX.1)
.TP
\fBENOTBLK\fP
Требуется блочное устройство
.TP
\fBENOTCONN\fP
Сокет не подключён (POSIX.1)
.TP
\fBENOTDIR\fP
Не каталог (POSIX.1)
.TP
\fBENOTEMPTY\fP
.\" ENOTNAM is defined but appears to be unused.
Каталог не пуст (POSIX.1)
.TP
\fBENOTSOCK\fP
Не сокет (POSIX.1)
.TP
\fBENOTSUP\fP
Неподдерживаемая операция (POSIX.1)
.TP
\fBENOTTY\fP
Неподходящая операция управления вводом/выводом (POSIX.1)
.TP
\fBENOTUNIQ\fP
Имя не уникально в сети
.TP
\fBENXIO\fP
Нет такого устройства или адреса (POSIX.1)
.TP
\fBEOPNOTSUPP\fP
Операция не поддерживается на сокете (POSIX.1)
.sp
(\fBENOTSUP\fP и \fBEOPNOTSUPP\fP в Linux имеют одинаковые значения, но согласно
POSIX.1 значения этих ошибок должны различаться.)
.TP
\fBEOVERFLOW\fP
Значение слишком велико для хранения в таком типе данных (POSIX.1)
.TP
\fBEPERM\fP
Операция не позволена (POSIX.1)
.TP
\fBEPFNOSUPPORT\fP
Неподдерживаемое семейство протоколов
.TP
\fBEPIPE\fP
Обрыв канала (POSIX.1)
.TP
\fBEPROTO\fP
Ошибка протокола (POSIX.1)
.TP
\fBEPROTONOSUPPORT\fP
Протокол не поддерживается (POSIX.1)
.TP
\fBEPROTOTYPE\fP
Неподдерживаемый тип протокола для сокета (POSIX.1)
.TP
\fBERANGE\fP
Результат слишком большой (POSIX.1, C99)
.TP
\fBEREMCHG\fP
Удалённый адрес был изменён
.TP
\fBEREMOTE\fP
Это удалённый объект
.TP
\fBEREMOTEIO\fP
Ошибка удалённого ввода/вывода
.TP
\fBERESTART\fP
Прерванный системный вызов следует перезапустить
.TP
\fBEROFS\fP
Файловая система, доступная только для чтения (POSIX.1)
.TP
\fBESHUTDOWN\fP
Невозможно отправить данные после выключения конечной точки передачи
.TP
\fBESPIPE\fP
Недопустимое перемещение (POSIX.1)
.TP
\fBESOCKTNOSUPPORT\fP
Неподдерживаемый тип сокета
.TP
\fBESRCH\fP
.\" ESRMNT is defined but appears not to be used
Нет такого процесса (POSIX.1)
.TP
\fBESTALE\fP
Неактуальный дескриптор файла (POSIX.1)
.sp
Эта ошибка может возникать в NFS и других файловых системах
.TP
\fBESTRPIPE\fP
Ошибка потоков канала
.TP
\fBETIME\fP
Таймер истёк (POSIX.1 (часть XSI STREAMS))
.sp
(в POSIX.1 описывается как «в \fBioctl\fP(2) истекло время ожидания STREAM»)
.TP
\fBETIMEDOUT\fP
.\" ETOOMANYREFS is defined, but appears not to be used.
Время ожидания соединения истекло (POSIX.1)
.TP
\fBETXTBSY\fP
Текстовый файл занят (POSIX.1)
.TP
\fBEUCLEAN\fP
Структуру необходимо почистить
.TP
\fBEUNATCH\fP
Драйвер протокола не подсоединён
.TP
\fBEUSERS\fP
Слишком много пользователей
.TP
\fBEWOULDBLOCK\fP
Операция приведёт к блокировке (значение может быть равным \fBEAGAIN\fP)
(POSIX.1)
.TP
\fBEXDEV\fP
Некорректная ссылка (POSIX.1)
.TP
\fBEXFULL\fP
Обмен полон
.SH ЗАМЕЧАНИЯ
Распространённая ошибка:
.in +4n
.nf
if (somecall() == \-1) {
printf("somecall() failed\en");
if (errno == ...) { ... }
}
.fi
.in
Здесь \fIerrno\fP может больше не иметь значение результата последнего вызова
\fIsomecall\fP() (т.е., значение может измениться из\-за \fBprintf\fP(3)). Если
значение \fIerrno\fP важно, то его нужно сохранять между библиотечными
вызовами:
.in +4n
.nf
if (somecall() == \-1) {
int errsv = errno;
printf("somecall() failed\en");
if (errsv == ...) { ... }
}
.fi
.in
.PP
Раньше в Си было распространена практика определения \fIerrno\fP вручную (т.е.,
\fIextern int errno\fP), вместо включения файла \fI\fP. \fBНе
делайте этого\fP. Это не будет работать с современными версиями библиотеки
Си. Однако, на (очень) старых системах UNIX файл \fI\fP может
отсутствовать и определение необходимо.
.SH "СМОТРИТЕ ТАКЖЕ"
.\" In the moreutils package
\fBerrno\fP(1), \fBerr\fP(3), \fBerror\fP(3), \fBperror\fP(3), \fBstrerror\fP(3)