Как конвертировать errno в UNIX в соответствующую строку? - PullRequest
37 голосов
/ 10 октября 2009

Есть ли в UNIX какая-либо функция для преобразования errno в соответствующую ей строку, например, для EIDRM для "EIDRM". Очень неприятно отлаживать проверку на наличие ошибок с этими целочисленными ошибками.

Ответы [ 5 ]

69 голосов
/ 10 октября 2009

strerror() должен это сделать. http://linux.die.net/man/3/strerror

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

10 голосов
/ 10 октября 2009

Просто еще одно решение, которое решает именно вашу проблему, но в Python вместо C:

>>> import errno
>>> errno.errorcode[errno.EIDRM]
'EIDRM'
5 голосов
/ 25 декабря 2012

Теперь есть утилита errno, распространяемая с пакетом moreutils.

4 голосов
/ 10 октября 2009

Я не уверен насчет таких имен enum, но для целей отладки и создания отчетов об ошибках вы можете использовать perror(3) или strerror(3) функции C, которые возвращают удобочитаемое представление кода ошибки. Пожалуйста, обратитесь к справочным страницам для более подробной информации.

3 голосов
/ 10 октября 2009

Если вы действительно хотите EIDRM, а не строку ошибки: нет. Однако в OpenBSD

man errno|egrep ' [0-9]+ E[A-Z]+'|sed 's/^ *//'|cut -d' ' -f1,2

распечатывает симпатичную таблицу «... \ n89 EIDM \ n ...», которую вы можете преобразовать в структуру данных для языка программирования, в котором вы хотите использовать эту функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...