Как перевести код ошибки в 'errno' константу?

Короче говоря, можно ли сделать это? Да. Необходимо ли сделать это? Я не рекомендую это, но это может работать, если Вы в безвыходном положении.

С точки зрения производительности это зависит от загрузки этих двух сервисов. В небольшой сети DC мог также удвоиться как DNS или сервер DHCP без проблемы. В большей сети это напрашивается на неприятности.

Я высоко рекомендовал бы не поместить больше чем один "основной" сервер на то же физическое поле. IE, если бы это - Ваш основной DC, с помощью него в качестве вторичного сервера DNS или резервного сервера DHCP, был бы приемлем. Так как причина, Вы не хотите, чтобы отказ на одном поле вынул для вынимания двух сервисов.

Я высоко отговорил бы любого выполнять более требовательные сервисы, такие как веб-сервер (IIS или Apache, и т.д.) или Базы данных любого вида.

Если бы Вы действительно решаете выполнить больше чем один тип сервиса на то же физическое поле, я высоко рекомендовал бы стать максимально "раскормленным" из поля и использовать его в качестве хоста к Виртуализированным серверам. Таким образом, все Ваши сервисы все еще несколько независимы друг от друга на уровне ОС.

5
задан 10 July 2009 в 04:07
5 ответов

Я использую, чтобы сделать

perl -MPOSIX -e 'print strerror($ARGV[0])."\n";' 13

Можно просто поместить код Perl в файл и иметь его в пути.
Конечно, это может быть сделано с помощью C также

8
ответ дан 3 December 2019 в 00:58
  • 1
    ' Конечно, это может быть сделано с помощью C как well' - менее портативный (должен перекомпилировать), –  LiraNuna 9 July 2009 в 23:22
  • 2
    Да! Это, почему я использую жемчуг ;) –  radius 9 July 2009 в 23:25
~% perror 13
OS error code  13:  Permission denied
~% rpm -qf =perror
mysql-server-5.0.45-7.el5
4
ответ дан 3 December 2019 в 00:58
  • 1
    Какая платформа - это? Вы говорите, что perror является утилитой, установленной наряду с MySQL Server? –  An̲̳̳drew 9 July 2009 в 23:27
  • 2
    Программа ' perror' может быть найден в следующих пакетах: * mysql-server-5.0 * mysql-server-5.1 На debian. –  LiraNuna 9 July 2009 в 23:55
  • 3
    @Andrew: Да, mysql-сервер устанавливает эту утилиту, " perror" вероятно, потому что они заметили отсутствие такой утилиты, и насколько полезный это будет. –  Juliano 10 July 2009 в 00:06

Попробуйте strerror (3).

Из страницы справочника:

DESCRIPTION

 The strerror(), strerror_r() and perror() functions look up the error
 message string corresponding to an error number.

 The strerror() function accepts an error number argument errnum and
 returns a pointer to the corresponding message string.

 The strerror_r() function renders the same result into strerrbuf for a
 maximum of buflen characters and returns 0 upon success.

 The perror() function finds the error message corresponding to the cur-
 rent value of the global variable errno (intro(2)) and writes it, fol-
 lowed by a newline, to the standard error file descriptor.  If the argu-
 ment string is non-NULL and does not point to the null character, this
 string is prepended to the message string and separated from it by a
 colon and space (``: ''); otherwise, only the error message string is
 printed.

 If the error number is not recognized, these functions return an error
 message string containing ``Unknown error: '' followed by the error num-
 ber in decimal.  The strerror() and strerror_r() functions return EINVAL
 as a warning.  Error numbers recognized by this implementation fall in
 the range 0 < errnum < sys_nerr.

 If insufficient storage is provided in strerrbuf (as specified in buflen)
 to contain the error string, strerror_r() returns ERANGE and strerrbuf
 will contain an error message that has been truncated and NUL terminated
 to fit the length specified by buflen.

 The message strings can be accessed directly using the external array
 sys_errlist.  The external value sys_nerr contains a count of the mes-
 sages in sys_errlist.  The use of these variables is deprecated;
 strerror() or strerror_r() should be used instead.
2
ответ дан 3 December 2019 в 00:58
  • 1
    Я должен скомпилировать программу C для создания этого системного вызова? Или я мог использовать что-то как awk? –  An̲̳̳drew 9 July 2009 в 23:18

cpp -dM предварительно обрабатывает исходный или заголовочный файл и печатает каждый #define то, что это находит. Это более устойчиво, чем захват через /usr/include/errno.h, так как это получит каждый файл это /usr/include/errno.h включает.

Объединение cpp-dM с предложениями других:

function lookuperror
{
    cpp -dM /usr/include/errno.h | grep -w "$@"
    perl -MPOSIX -e 'print "Description:".strerror($ARGV[0])."\n";' $@
}

Вставьте в .bashrc или поместите его содержание как автономный сценарий оболочки.

1
ответ дан 3 December 2019 в 00:58

Как обходное решение Вы могли в своей оболочке делать псевдоним или функцию:

например. .bashrc

function lookuperror
{
    grep -w "$@" /usr/include/errno.h
}
1
ответ дан 3 December 2019 в 00:58

Теги

Похожие вопросы