Функция system
возвращает -1
в случае сбоя самой system
, а не в случае сбоя вызванной ею команды. Например, system
возвращает -1
, если вызов fork
завершился неудачей. Это может произойти, если в вашей системе очень мало ресурсов, таких как память, или если ваша система накладывает ограничение на количество процессов, которые вы можете запустить.
Если команда завершается ошибкой (например, если вы вызываете system("false")
), значение, возвращаемое system
, не является просто возвращаемым значением команды; это значение, возвращаемое системным вызовом wait
; man 2 wait
для получения дополнительной информации. (Это предполагает Unix-подобную систему; поведение system()
в других операционных системах отличается.)
Конечно, если вы хотите увидеть значение, возвращаемое вызовом system
, вам нужно сохранить это значение в переменной:
int result = system("ls");
Вам следует прочитать документацию по функции system
.
Если вы пытаетесь вызвать сбой system
и вернуть -1
, один из способов сделать это — использовать его для рекурсивного вызова вашей программы. Это может потреблять много памяти и может мешать работе вашей системы. Делайте это только в том случае, если вы единственный человек, использующий систему, и вы не возражаете против возможного вмешательства в ее работу.
(Между прочим, определение для main
должно быть int main(void)
, а не только main()
, хотя это не имеет прямого отношения. До 1999 года опущение возвращаемого типа означало бы по умолчанию int
; это больше не разрешено, но многие компиляторы по-прежнему поддерживают старую форму. Пустые круглые скобки делают не указывать количество параметров; (void)
явно говорит об отсутствии параметров и является предпочтительной формой.)
person
Keith Thompson
schedule
21.07.2015
system
потерпеть неудачу, чтобы он возвращал-1
? Что вы хотите сделать с результатом? - person Keith Thompson   schedule 21.07.2015