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



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

4.3.1. Значения >errno

Стандарт POSIX 2001 определяет большое число возможных значений для errno. Многие из них относятся к сетям, IPC или другим специальным задачам. Справочная страница для каждого системного вызова описывает возможные значения >errno, которые могут иметь место; поэтому вы можете написать код для проверки отдельных ошибок и соответствующим образом обработать их, если это нужно. Возможные значения определены через символические имена. Предусмотренные GLIBC значения перечислены в табл. 4.1.


Таблица 4.1. Значения GLIBC для >errno

ИмяЗначение
>E2BIGСлишком длинный список аргументов
>EACCESSДоступ запрещен
>EADDRINUSEАдрес используется
>EADDRNOTAVAILАдрес недоступен
>EAFNOSUPPORTСемейство адресов не поддерживается
>EAGAINРесурс недоступен, попытайтесь снова (может быть то же самое значение, что >EWOULDBLOCK).
>EALREADYСоединение уже устанавливается
>EBADFОшибочный дескриптор файла.
>EBADMSGОшибочное сообщение.
>EBUSYУстройство или ресурс заняты
>ECANCELEDОтмена операции.
>ECHILDНет порожденного процесса.
>ECONNABORTEDСоединение прервано
>ECONNFRFUSEDСоединение отклонено
>ECONNRESETВосстановлено исходное состояние соединения.
>EDEADLKВозможен тупик (deadlock) в запросе ресурса.
>EDESTADDRREQТребуется адрес назначения
>EDOMМатематический аргумент выходит за область определения функции
>EDQUOTЗарезервировано.
>EEXISTФайл существует.
>EFAULTОшибочный адрес.
>EFBIGФайл слишком большой.
>EHOSTUNREACHХост недоступен.
>EIDRMИдентификатор удален
>EILSEQОшибочная последовательность байтов.
>EINPROGRESSОперация исполняется.
>EINTRПрерванная функция.
>EINVALНедействительный аргумент.
>EIOОшибка ввода/вывода.
>EISCONNСокет (уже) соединен.
>EISDIRЭто каталог.
>ELOOPСлишком много уровней символических ссылок.
>EMFILEСлишком много открытых файлов.
>EMLINKСлишком много ссылок.
>EMSGSIZEСообщение слишком длинное.
>EMULTIHOPЗарезервировано.
>ENAMETOOLONGИмя файла слишком длинное
>ENETDOWNСеть не работает
>ENETRESETСоединение прервано сетью
>ENETUNREACHСеть недоступна.
>ENFILEВ системе открыто слишком много файлов.
>ENOBUFSБуферное пространство недоступно.
>ENODEVУстройство отсутствует
>ENOENTФайл или каталог отсутствуют