Linux программирование в примерах | страница 75



>ENOEXECОшибочный формат исполняемого файла.
>ENOLCKБлокировка недоступна.
>ENOLINKЗарезервировано.
>ENOMEMНедостаточно памяти.
>ENOMSGСообщение нужного типа отсутствует
>ENOPROTOOPTПротокол недоступен.
>ENOSPCНедостаточно памяти в устройстве.
>ENOSYSФункция не поддерживается.
>ENOTCONNСокет не соединен.
>ENOTDIRЭто не каталог
>ENOTEMPTYКаталог не пустой.
>ENOTSOCKЭто не сокет
>ENOTSUPНе поддерживается
>ENOTTYНеподходящая операция управления вводом/выводом
>ENXIOНет такого устройства или адреса.
>EOPNOTSUPPОперация сокета не поддерживается
>EOVERFLOWСлишком большое значение для типа данных
>EPERMОперация не разрешена
>EPIPEКанал (pipe) разрушен
>EPROTOОшибка протокола.
>EPROTONOSUPPORTПротокол не поддерживается
>EPROTOTYPEОшибочный тип протокола для сокета
>ERANGEРезультат слишком большой
>EROFSФайловая система только для чтения
>ESPIPEНедействительный поиск
>ESRCHНет такого процесса
>ESTALEЗарезервировано
>ETIMEDOUTТайм-аут соединения истек
>ETXTBSYТекстовый файл занят
>EWOULDBLOCKБлокирующая операция (может быть то же значение, что и для >EAGAIN)
>EXDEVСсылка через устройство (cross-device link)

Многие системы предоставляют также другие значения ошибок, а в более старых системах может не быть всех перечисленных значений ошибок. Полный список следует проверить с помощью справочных страниц intro(2) и errno(2) для локальной системы.

ЗАМЕЧАНИЕ. >errno следует проверять лишь после того, как возникла ошибка и до того, как сделаны дальнейшие системные вызовы. Начальное значение той переменной 0. Однако, в промежутках между ошибками ничто не изменяет ее значения, это означает, что успешный системный вызов не восстанавливает значение 0. Конечно, вы можете вручную установить ее в 0 в самом начале или когда захотите, однако это делается редко.

Сначала мы используем >errno лишь для сообщений об ошибках. Для этого имеются две полезные функции. Первая — >perror():

>#include /* ISO С */


>void perror(const char *s);

Функция >perror() выводит предоставленную программой строку, за которой следует двоеточие, а затем строка, описывающая значение >errno:

>if (some_system_call(param1, param2) < 0) {

> perror("system call failed");

> return 1;

>}

Мы предпочитаем функцию >strerror(), которая принимает параметр со значением ошибки и возвращает указатель на строку с описанием ошибки:

>#include /* ISO С */


>char *strerror(int errnum);

>strerror() предоставляет для сообщений об ошибках максимальную гибкость, поскольку >fprintf() дает возможность выводить ошибки любым нужным нам способом, наподобие этого.