Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       errno - код последней ошибки

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <errno.h>

ОПИСАНИЕ

       В  заголовочном  файле  <errno.h>  определяется  целочисленная  переменная  errno,  которая  используется
       системными вызовами и некоторыми библиотечными функциями  при  ошибках  для  указания  того,  что  именно
       произошло.

   errno
       Значение  errno  имеет  смысл  только тогда, когда вызов возвратил ошибку (а именно: -1 — для большинства
       системных вызовов; NULL — для большинства библиотечных функций); при успешном  выполнении  функции  также
       могут  менять  значение  errno.  Системные  вызовы  и  библиотечные  функции никогда не присваивают errno
       значение нуля.

       Некоторые системные вызовы или библиотечные функции (например, getpriority(2)), при  успешном  выполнении
       возвращают -1. В этих случаях успешность выполнения можно отличить от ошибки присвоив errno значение нуля
       перед  вызовом, и затем, если вызов вернул состояние, которое может указывать на ошибку, проверить, равно
       ли errno ненулевому значению.

       Переменная errno определена в стандарте ISO C как изменяемое lvalue int  и  не  объявляемая  явно;  errno
       может  быть  и макросом. Переменная errno является локальным значением нити; её изменение в одной нити не
       влияет на её значение в другой нити.

   Номера и имена ошибок
       Все положительные числа считаются допустимыми номерами ошибок. В заголовочном файле <errno.h>  определены
       символические имена для каждого номера возможной ошибки, который может появиться в errno.

       Всем  названиям  ошибок,  определённым  в POSIX.1, должны соответствовать разные значения, за исключением
       EAGAIN и EWOULDBLOCK, которые могут быть одинаковыми. В Linux эти они имеют одинаковое значение  на  всех
       архитектурах.

       В  разных системах UNIX символическим именам ошибок назначены разные номера, и это верно даже в Linux для
       разных архитектур. Поэтому числовые значение не указаны в представленном далее списке  имён  ошибок.  Для
       преобразования  этих  имён  в  текстовые  сообщения  об  ошибках  можно  использовать функции perror(3) и
       strerror(3).

       В любой системе Linux можно получить список всех символических имён ошибок и соответствующие им номера  с
       помощью команды errno(1)) (является частью пакета moreutils):

           $ errno -l
           EPERM 1 Операция не позволена
           ENOENT 2 Нет такого файла или каталога
           ESRCH 3 Нет такого процесса
           EINTR 4 Прерван системный вызов
           EIO 5 Ошибка ввода/вывода
           ...

       Команду  errno(1)  также  можно  использовать  для  поиска ошибок по имени или номеру, а также по строке,
       входящей в описание ошибки:

           $ errno 2
           ENOENT 2 Нет такого файла или каталога
           $ errno ESRCH
           ESRCH 3 Нет такого процесса
           $ errno -s permission
           EACCES 13 Отказано в доступе

   Список имён ошибок
       В представленном далее списки символических имён ошибок у некоторых есть некоторые примечания:

       POSIX.1-2001
              The name is defined by POSIX.1-2001, and is defined in later POSIX.1  versions,  unless  otherwise
              indicated.

       POSIX.1-2008
              The name is defined in POSIX.1-2008, but was not present in earlier POSIX.1 standards.

       C99    The name is defined by C99.

       Below is a list of the symbolic error names that are defined on Linux:

       E2BIG           Слишком длинный список параметров (POSIX.1-2001).

       EACCES          Доступ запрещён (POSIX.1-2001).

       EADDRINUSE      Адрес уже используется (POSIX.1-2001).

       EADDRNOTAVAIL   Адрес недоступен (POSIX.1-2001).

       EAFNOSUPPORT    Семейство адресов не поддерживается (POSIX.1-2001).

       EAGAIN          Ресурс временно недоступен (значение может быть равным EWOULDBLOCK) (POSIX.1-2001).

       EALREADY        Соединение уже выполняется (POSIX.1-2001).

       EBADE           Некорректный обмен.

       EBADF           Неправильный дескриптор файла (POSIX.1-2001).

       EBADFD          Некорректное состояние дескриптора файла.

       EBADMSG         Неправильное сообщение (POSIX.1-2001).

       EBADR           Неверный дескриптор запроса.

       EBADRQC         Неверный код запроса.

       EBADSLT         Некорректный слот.

       EBUSY           Устройство или ресурс заняты (POSIX.1-2001).

       ECANCELED       Операция отменена (POSIX.1-2001).

       ECHILD          Отсутствуют дочерние процессы (POSIX.1-2001).

       ECHRNG          Номер канала вне диапазона.

       ECOMM           Ошибка связи при отправке.

       ECONNABORTED    Соединение было прервано (POSIX.1-2001).

       ECONNREFUSED    В соединении отказано (POSIX.1-2001).

       ECONNRESET      Соединение сброшено другой стороной (POSIX.1-2001).

       EDEADLK         Предотвращена тупиковая ситуация при обращении к ресурсу (POSIX.1-2001).

       EDEADLOCK       На   большинстве   архитектур  является  синонимом  EDEADLK.  На  некоторых  архитектурах
                       (например, Linux MIPS, PowerPC, SPARC), это отдельный  код  ошибки  «Ошибка  перекрёстной
                       блокировки файла».

       EDESTADDRREQ    Требуется указать адрес назначения (POSIX.1-2001).

       EDOM            Математический аргумент вне области определения функции (POSIX.1, C99).

       EDQUOT          Превышена дисковая квота (POSIX.1-2001).

       EEXIST          Файл существует (POSIX.1-2001).

       EFAULT          Неправильный адрес (POSIX.1-2001).

       EFBIG           Файл слишком велик (POSIX.1-2001).

       EHOSTDOWN       Узел выключен.

       EHOSTUNREACH    Узел недоступен (POSIX.1-2001).

       EHWPOISON       В странице памяти аппаратная ошибка.

       EIDRM           Идентификатор удалён (POSIX.1-2001).

       EILSEQ          Неверный или неполный мультибайтный или широкий символ (POSIX.1, C99).

                       Этот  текст  взят из описания ошибки glibc; в POSIX.1 эта ошибка звучит как «Недопустимая
                       последовательность байт».

       EINPROGRESS     Операция выполняется (POSIX.1-2001).

       EINTR           Прерванный вызов функции (POSIX.1-2001); смотрите signal(7).

       EINVAL          Неверный аргумент (POSIX.1-2001).

       EIO             Ошибка ввода/вывода (POSIX.1-2001).

       EISCONN         Сокет подключён (POSIX.1-2001).

       EISDIR          Это каталог (POSIX.1-2001).

       EISNAM          Является файлом именованного типа.

       EKEYEXPIRED     Ключ с истёкшим сроком.

       EKEYREJECTED    Ключ был отвергнут службой.

       EKEYREVOKED     Ключ был отозван.

       EL2HLT          Уровень 2 остановлен.

       EL2NSYNC        Уровень 2 не синхронизирован.

       EL3HLT          Уровень 3 остановлен.

       EL3RST          Уровень 3 сброшен.

       ELIBACC         Невозможно получить доступ к нужной общей библиотеке.

       ELIBBAD         Обращение к повреждённой общей библиотеке.

       ELIBMAX         Попытка компоновки с слишком большим количеством общих библиотек.

       ELIBSCN         Секция .lib в a.out повреждена

       ELIBEXEC        Невозможно непосредственно выполнить общую библиотеку.

       ELNRNG          Число ссылок вне допустимого диапазона.

       ELOOP           Слишком много уровней символьных ссылок (POSIX.1-2001).

       EMEDIUMTYPE     Неправильный тип носителя.

       EMFILE          Too many open files (POSIX.1-2001).   Commonly  caused  by  exceeding  the  RLIMIT_NOFILE
                       resource  limit  described  in  getrlimit(2).   Can also be caused by exceeding the limit
                       specified in /proc/sys/fs/nr_open.

       EMLINK          Слишком много ссылок (POSIX.1-2001).

       EMSGSIZE        Сообщение слишком длинное (POSIX.1-2001).

       EMULTIHOP       Попытка Multihop (POSIX.1-2001).

       ENAMETOOLONG    Слишком длинное название файла (POSIX.1-2001).

       ENETDOWN        Сеть не работает (POSIX.1-2001).

       ENETRESET       Соединение прервано из-за сети (POSIX.1-2001).

       ENETUNREACH     Сеть недоступна (POSIX.1-2001).

       ENFILE          Слишком много открытых файлов в системе (POSIX.1-2001). В Linux это, вероятно,  результат
                       достижения ограничения /proc/sys/fs/file-max (смотрите proc(5)).

       ENOANO          Не anode.

       ENOBUFS         Недостаточно буферного пространства (POSIX.1 (часть XSI STREAMS)).

       ENODATA         The  named  attribute does not exist, or the process has no access to this attribute; see
                       xattr(7).

                       In POSIX.1-2001 (XSI STREAMS  option),  this  error  was  described  as  "No  message  is
                       available on the STREAM head read queue".

       ENODEV          Нет такого устройства (POSIX.1-2001).

       ENOENT          Нет такого файла или каталога (POSIX.1-2001).

                       Обычно,  эта  ошибка  является  результатом  указания несуществующего пути или отсутствия
                       одного из компонентов каталогов пути, или указанный путь является  символической  ссылкой
                       на несуществующий объект.

       ENOEXEC         Ошибка формата выполняемого файла (POSIX.1-2001).

       ENOKEY          Требуемый ключ недоступен.

       ENOLCK          Нет доступных блокировок (POSIX.1-2001).

       ENOLINK         Соединение было разорвано (POSIX.1-2001).

       ENOMEDIUM       Носитель не найден.

       ENOMEM          Недостаточно места/невозможно выделить память (POSIX.1-2001).

       ENOMSG          Нет сообщения желаемого типа (POSIX.1-2001).

       ENONET          Машина не в сети.

       ENOPKG          Пакет не установлен.

       ENOPROTOOPT     Протокол недоступен (POSIX.1-2001).

       ENOSPC          На устройстве не осталось места (POSIX.1-2001).

       ENOSR           Отсутствую ресурсы STREAM (POSIX.1 (часть XSI STREAMS)).

       ENOSTR          Нет STREAM (POSIX.1 (часть XSI STREAMS)).

       ENOSYS          Функция не реализована (POSIX.1-2001).

       ENOTBLK         Требуется блочное устройство.

       ENOTCONN        Сокет не подключён (POSIX.1-2001).

       ENOTDIR         Не каталог (POSIX.1-2001).

       ENOTEMPTY       Каталог не пуст (POSIX.1-2001).

       ENOTRECOVERABLE Состояние нельзя восстановить (POSIX.1-2008).

       ENOTSOCK        Не сокет (POSIX.1-2001).

       ENOTSUP         Операция не поддерживается (POSIX.1-2001).

       ENOTTY          Неподходящая операция управления вводом/выводом (POSIX.1-2001).

       ENOTUNIQ        Имя не уникально в сети.

       ENXIO           Нет такого устройства или адреса (POSIX.1-2001).

       EOPNOTSUPP      Операция не поддерживается на сокете (POSIX.1-2001).

                       (ENOTSUP  и  EOPNOTSUPP  в  Linux имеют одинаковые значения, но согласно POSIX.1 значения
                       этих ошибок должны различаться.)

       EOVERFLOW       Значение слишком велико для хранения в таком типе данных (POSIX.1-2001).

       EOWNERDEAD      Владелец умер (POSIX.1-2008).

       EPERM           Операция не позволена (POSIX.1-2001).

       EPFNOSUPPORT    Семейство протоколов не поддерживается.

       EPIPE           Обрыв канала (POSIX.1-2001).

       EPROTO          Ошибка протокола (POSIX.1-2001).

       EPROTONOSUPPORT Протокол не поддерживается (POSIX.1-2001).

       EPROTOTYPE      Неверный тип протокола для сокета (POSIX.1-2001).

       ERANGE          Результат слишком большой (POSIX.1, C99).

       EREMCHG         Удалённый адрес был изменён.

       EREMOTE         Это удалённый объект.

       EREMOTEIO       Ошибка удалённого ввода/вывода.

       ERESTART        Прерванный системный вызов следует перезапустить.

       ERFKILL         Операция не позволяется из-за RF-kill.

       EROFS           Файловая система доступна только для чтения (POSIX.1-2001).

       ESHUTDOWN       Невозможно отправить данные после выключения конечной точки передачи.

       ESPIPE          Недопустимое перемещение (POSIX.1-2001).

       ESOCKTNOSUPPORT Тип сокета не поддерживается.

       ESRCH           Нет такого процесса (POSIX.1-2001).

       ESTALE          Неактуальный дескриптор файла (POSIX.1-2001).

                       Эта ошибка может возникать в NFS и других файловых системах.

       ESTRPIPE        Ошибка потоков канала.

       ETIME           Таймер истёк (POSIX.1 (часть XSI STREAMS)).

                       (в POSIX.1 описывается как «в ioctl(2) истекло время ожидания STREAM»)

       ETIMEDOUT       Время ожидания соединения истекло (POSIX.1-2001).

       ETOOMANYREFS    Слишком много ссылок: невозможно объединить.

       ETXTBSY         Текстовый файл занят (POSIX.1-2001).

       EUCLEAN         Структуру необходимо очистить.

       EUNATCH         Драйвер протокола не подсоединён.

       EUSERS          Слишком много пользователей.

       EWOULDBLOCK     Операция приведёт к блокировке (значение может быть равно EAGAIN) (POSIX.1-2001).

       EXDEV           Invalid cross-device link (POSIX.1-2001).

       EXFULL          Обмен полон.

ПРИМЕЧАНИЯ

       Распространённая ошибка:

           if (somecall() == -1) {
               printf("somecall() failed\n");
               if (errno == ...) { ... }
           }

       Здесь errno может больше не иметь значение результата последнего вызова somecall() (т.е., значение  может
       измениться  из-за  printf(3)).  Если  значение  errno  важно,  то его нужно сохранять между библиотечными
       вызовами:

           if (somecall() == -1) {
               int errsv = errno;
               printf("somecall() failed\n");
               if (errsv == ...) { ... }
           }

       Note that the POSIX threads APIs do not set errno on error.  Instead, on failure  they  return  an  error
       number  as the function result.  These error numbers have the same meanings as the error numbers returned
       in errno by other APIs.

       В некоторых древних системах файл <errno.h> отсутствовал или не объявлял errno, поэтому  это  нужно  было
       делать вручную (например, extern int errno). Не делайте этого. Это давно уже не нужно, и вызовет проблемы
       с современными версиями библиотеки C.

СМОТРИТЕ ТАКЖЕ

       errno(1), err(3), error(3), perror(3), strerror(3)

ПЕРЕВОД

       Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Yuri
       Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  15 июня 2024 г.                                        errno(3)