Выполнить системную команду
#include <stdlib.h>int system( const char *command );
NULL
или системная команда для исполнения.libc
Поведение функции system() зависит от значения аргумента command:
NULL
, system() позволяет отпределить доступна ли командная оболочка (командный интерпретатор).
NULL
, system() запускает командный интерпретатор и передает ему строку command для исполнения. Данная функция использует spawnlp() для запуска копии командного интерпретатора.
В качестве командного интерпретатора всегда используется /bin/sh , независимо от значения переменной окружения SHELL , поскольку приложение может полагаться на стандартные функции определенного командного интерпретатора, а не переопределенного переменной окружения.
Это означает, что любая команда, которую можно ввести в командном интерпретаторе, может быть исполнена, включая: программы и утилиты, а также скрипты. Функциями exec*() и spawn*(), например, можно исполнить только программы и утилиты. |
NULL
, system() возвращает 0
при недоступности командного интерпретатора и !0
в противном случае.
NULL
, system() возвращает статус завершения командного интерпретатора. Если Shell не может быть запущен, system() возвращает -1
; в противном случае возвращает статус завершения запрошенной команды. Используйте макрос WEXITSTATUS() для извлечения младших 8
бит статуса, характеризующих код возврата команды.
Например, предположим, что status есть результат работы system(). Если WEXITSTATUS( status ) возвращает 255
, то либо указанная команда вернула статус 255
, либо командный интерпретатор не запустился (например, он был терминирован сигналом или не смог запуститься вовсе) и значение 255
возвращено из-за особенностей его реализации. Так, в ЗОСРВ «Нейтрино» и в большинстве Unix-подобных систем, значение будет равно 255
если status равен -1
, что сигнализирует невозможность запуска командного интерпретатора. Макрос WEXITSTATUS() определен в <sys/wait.h>
.
Подробнее о макросах, позволяющих извлекать информацию из возвращаемого значения функции system() см. Макросы статуса и описание функции wait().
Если возникла ошибка, errno будет содержать соответствующий код ошибки.
#include <stdlib.h>#include <stdio.h>#include <sys/wait.h>int main( void ){int rc;rc = system( "ls" );if ( rc == -1 ){printf( "shell could not be run\n" );} else {printf( "result of running command is %d\n", WEXITSTATUS( rc ) );}return (EXIT_SUCCESS);}
ANSI, POSIX 1003.1
abort(), atexit(), close(), errno, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), exit(), _exit(), getenv(), main(), putenv(), sigaction(), signal(), spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe(), wait(), waitpid()
Предыдущий раздел: Описание API системной библиотеки