Обобщение комментариев, кусочков и кусочков, чтобы они были в одном месте.
Программа AC всегда имеет код выхода , который программа может решить для себя, завершится ли она нормально, путемвозврат значения из функции main
или путем вызова функции exit
.Если программа завершается ненормально, например, из-за ошибки сегментации, операционная система решает код выхода.
В Unix (Posix) код выхода представляет собой 8-битное значение: 0-255.Они объединяются с некоторыми другими метаданными в состояние : другие метаданные включают информацию о том, была ли программа завершена нормально или нет, была ли она завершена из-за сигнала, и если да, то какой сигнал.Подробнее см. Справочную страницу wait (2) .
В Unix, в оболочке, статус предыдущей команды доступен в виде специальной переменной $?
.Поскольку код выхода составляет всего 8 бит, и он рассматривается как целое число без знака, если вы возвращаете отрицательное значение, оно превращается в положительное: -1 становится 255. Аналогично, если вы возвращаете значение, большее 255, только наименьшееиспользуются значимые 8 битов: 256 становится 0.
Тип возврата main
равен int
, а не short
или char
, потому что нет особого преимущества в том, чтобы сделать его меньшим типом,особенно на этом этапе истории, спустя десятилетия после того, как было принято решение.Теперь его изменение может вызвать только ненужные осложнения.
Если вы хотите запустить программу из C, стандартная библиотека предоставляет функцию system
, которая легко возвращает статус программы.(Обратите внимание, что system
запускает команды через оболочку, и вам нужно быть очень осторожным, чтобы избежать всего правильно, если вы дадите команде какие-либо внешние имена файлов или другие вещи в командной строке.)
Для большей гибкостиВы можете запускать другие программы, используя системные вызовы fork
, execl
(или один из его вариантов, см. справочную страницу exec (3) ) и wait
(уже упоминалось выше).Это мощный и гибкий инструмент, но он также легко допускает ошибки, поэтому обязательно прочитайте документацию и ознакомьтесь с некоторыми примерами программ.(С другой стороны, очень интересно изучать этот материал.)