Соглашение о статусе выхода в программах Unix

Рассмотрим команду Unix foo, которая считывает файл (или stdin) построчно, где каждая строка должна соответствовать определенному формату, например, формату /etc/passwd.

Если какая-либо из строк неверна (но не все), должен ли статус завершения быть EXIT_SUCCESS или EXIT_FAILURE?

Я пытался ссылаться на стандарт,

Стандарт C11: 7.20.4.3 Функция exit
Параграф 5

Наконец, управление возвращается в хост-среду. Если значение status равно нулю или EXIT_SUCCESS, возвращается определенная реализацией форма успешного завершения состояния. Если значение status равно EXIT_FAILURE, возвращается определяемая реализацией форма статуса неудачного завершения. В противном случае возвращаемый статус определяется реализацией.

Моя интерпретация вышеизложенного заключается в том, что «определяется реализацией» означает, что решение остается за реализатором. Верна ли эта интерпретация?


person Filip Allberg    schedule 24.06.2016    source источник
comment
Некоторые переводы со стандартной тарабарщины C на английский язык: реализация = компилятор, реализация, определяемая = поведение, специфичное для компилятора (которое, в свою очередь, может зависеть от поведения, специфичного для системы). Все в стандарте C написано таким образом, что оно адресовано человеку, пишущему компилятор, а не конечному пользователю/разработчику приложения.   -  person Lundin    schedule 28.06.2016
comment
Очевидно: ссылка из Магазина различных вещей Джимбо (т.е. Википедия): статус выхода   -  person David Tonhofer    schedule 10.12.2016


Ответы (2)


Термин "определенная реализация" в стандарте C означает реализацию платформы, а не программиста отдельного приложения.

Это предложение означает, что разные платформы могут иметь разные соглашения о том, как успех или неудача передаются в среду, например, в оболочку. Реализации также могут предоставлять средства для различения различных кодов отказа в зависимости от причин, которые привели к нему. Но тогда такие коды могут быть не переносимы между разными системами.

Что касается семантики того, что вы, как программист, считаете успехом или неудачей, вы совершенно вольны делать все, что подходит для вашего приложения.

person Jens Gustedt    schedule 24.06.2016

Вы правы, что решение остается за исполнителем. Это зависит от того, как программа будет использоваться.

Например, если foo завершается с ошибкой при обнаружении неправильно отформатированного ввода, пользователь foo может написать сценарий оболочки, который проверяет его статус выхода и уведомляет ее по электронной почте, содержащей содержимое stderr. Если foo завершится успешно, отправлять электронное письмо не потребуется.

person Anthony Geoghegan    schedule 24.06.2016