Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

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

LIBRARY

       Standard C library (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>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.