В каком заголовочном файле определены EINVAL, ENOMEM и т. д. в Linux?

Говорят, что номера ошибок, такие как EINVAL, ENOMEM и т. д., определены в errno.h, но я не могу найти их в errno.h, я также искал некоторые каталоги в /usr/include, до сих пор не могу их найти. Я могу без проблем использовать эти макросы в своем коде C. Кто-нибудь может сказать мне, где они?


person oldnavy    schedule 09.12.2013    source источник


Ответы (3)


Он определяется либо непосредственно в errno.h, либо в файле, включенном (прямо или косвенно) в errno.h.

Я искал его с помощью следующей команды:

find /usr/include | xargs grep ENOMEM | grep '#define'

и я нашел совпадение в /usr/include/asm-generic/errno-base.h в своем Linux (RHEL 6).

person Klas Lindbäck    schedule 09.12.2013
comment
Остальное в /usr/include/asm-generic/errno.h - person alk; 09.12.2013

Это зависит от реализации стандартной библиотеки C.

Несомненно только то, что <errno.h> — это заголовок верхнего уровня, который должен использовать код приложения.

Один из способов выяснить это — проследить вызов компилятора.

person unwind    schedule 09.12.2013

Вы можете запустить locate errno.h | xargs grep EINVAL, чтобы найти местоположение

На моей машине с Ubuntu 12.04 это /usr/lib/syslinux/com32/include/errno.h

person rohit89    schedule 09.12.2013