возвращаемое значение system () в C - PullRequest
10 голосов
/ 28 декабря 2011

Я использую команду system() в C для выполнения таких команд, как sc query mysql или net start mysql.

Если параметр имеет нулевой указатель, он возвращает 1, если процессор cmd работает нормально, иначевозвращает 0. При успешном выполнении команды возвращает 0.

Мой вопрос: могу ли я получить список ее возвращаемых значений?Вроде того, что он вернет, если команда недействительна или какое будет возвращаемое значение при неудачном выполнении?Я хочу делать разные вещи в зависимости от возвращаемого значения system().

Ответы [ 3 ]

11 голосов
/ 28 декабря 2011

Все, что вам нужно сделать, это man system, чтобы узнать больше о system()

ОПИСАНИЕ system () выполняет команду, указанную в команде, вызывая команду / bin / sh -c, и возвращает после того, как команда была завершено. Во время выполнения команды SIGCHLD будет заблокирован, и SIGINT и SIGQUIT будут игнорироваться.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ Возвращаемое значение равно -1 в случае ошибки (например, ошибка fork (2)), а в противном случае возвращается статус команды. Этот последний Статус возврата в формате, указанном в wait (2). Таким образом, выход Код команды будет WEXITSTATUS (статус). В случае, если / bin / sh может не будет выполнен, статус выхода будет статусом команды, которая делает выхода (127). Если значение команды равно NULL, system () возвращает ненулевое значение если оболочка доступна, и ноль, если нет.

10 голосов
/ 28 декабря 2011

Как документы state system () возвращает -1, если создание нового процесса для исполняемой команды завершается неудачно, в противном случае возвращается код завершения выполненной команды. это то же значение, которое вы можете получить, используя echo $? в Unix или echo %ERRORLEVEL% в Windows после выполнения той же команды в оболочке. Поэтому, если вы хотите обработать возвращаемые значения, вам нужно посмотреть, что возвращают выполненные команды.

5 голосов
/ 28 декабря 2011

system () возвращает код завершения запускаемого вами процесса.

Коды выхода обычно имеют соглашение о том, что код выхода 0 означает успех, а ненулевой означает сбой. Что касается фактического значения различных кодов выхода, они специфичны для каждой программы, а иногда и по прихоти программиста. Вам придется искать документацию конкретной программы, которую вы запускаете (хотя чаще всего она не документирована, поэтому вам придется прочитать исходный код)

...