Неиспользуемые коды состояния возврата в C

Я хочу вернуть уникальный код состояния ожидающему родительскому процессу из дочернего процесса через 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()?


person Community    schedule 07.09.2010    source источник


Ответы (3)


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

Доказательство: предположим, что существует такое K, и вы заставляете свою программу вызывать себя...

person Erich Kitzmueller    schedule 07.09.2010
comment
Вы можете с уверенностью предположить, что программа не будет вызывать сама себя, по крайней мере, в том контексте, в котором я использую этот код. - person ; 07.09.2010
comment
Конечно, вы этого не сделаете, но рассмотрение показывает, что безопасного значения быть не может. Какие значения безопасны, зависит от программы, которую вы вызываете. - person Erich Kitzmueller; 07.09.2010

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

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

person mmmmmm    schedule 07.09.2010

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

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

person Community    schedule 07.09.2010
comment
все негативы зарезервированы для ОС? - person ; 07.09.2010