Неиспользованные коды статуса возврата в C - PullRequest
1 голос
/ 07 сентября 2010

Я хочу вернуть уникальный код состояния ожидающему родительскому процессу из дочернего процесса через exit () на основе выполнения дочернего кода. Если execvp терпит неудачу, тогда используется exit (). Я предполагаю, что если execvp успешен, выполненная команда отправит свой код состояния.

pid=fork();
if(pid==0)
{
    if(execvp(cmdName,cmdArgs)==-1)
    {
         printf("Exec failed!\n");
         exit(K);   //K?
    }
}
waitpid(pid,&status,0);

Предположим, что команда, переданная execvp () - "ls", на странице руководства сказано, что она может вернуть 0 (успех), 1 или 2 (сбой).

Какое безопасное уникальное значение K я могу использовать, чтобы указать статус возврата дочернего процесса, который не будет конфликтовать с любым значением, возвращаемым командой, выполняемой execvp ()?

Ответы [ 3 ]

7 голосов
/ 07 сентября 2010

По понятным причинам не может быть такого значения K, которое никогда не будет конфликтовать с состоянием возврата любой другой программы.

Доказательство: Предположим, что было такое K, и вы вызываете сам вызов вашей программы...

1 голос
/ 07 сентября 2010

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

Вы должны задокументировать свою программу и сказать, что она возвращает, а также предоставить некоторую форму журнала, чтобы предоставить более подробную информацию.

0 голосов
/ 07 сентября 2010

Я полагаю, что все, что выше 127 (или отрицательное, если вы используете подписанный байт), зарезервировано для ОС (в Unix) для сообщения о сбоях, ошибках четности и тому подобном (любой выход из-за обработчика сигнала и некоторых других вещей, кроме). Все остальные коды выхода вы можете использовать.

Обновление: найдена ссылка для Linux: http://www.tldp.org/LDP/abs/html/exitcodes.html

...