Возвращаемое значение функции system()

#include<stdio.h>
#include<stdlib.h>
main()
{
printf("Hello World..\n");
system("ls");
}

Здесь... ПРИ УСПЕШНОМ выполнении системная функция возвращает состояние команды "ls"... а ПРИ ОШИБКЕ возвращает -1..

так может ли кто-нибудь помочь мне получить это условие FAILURE для системной функции, которая возвращает значение как «-1»


person Bhavik patel    schedule 21.07.2015    source источник
comment
Вы спрашиваете, как заставить system потерпеть неудачу, чтобы он возвращал -1? Что вы хотите сделать с результатом?   -  person Keith Thompson    schedule 21.07.2015


Ответы (1)


Функция 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
comment
Системный вызов ожидания, предполагая, что вы находитесь в posixized системе (почему?) - person n. 1.8e9-where's-my-share m.; 21.07.2015
comment
@n.m.: Хороший вопрос. OP использует gcc и команду ls, что делает ее похожей на Unix систему, но я обновил свой ответ, чтобы сделать его более явным. - person Keith Thompson; 21.07.2015
comment
@n.m.: Unix-подобная система. - person Keith Thompson; 21.07.2015