Вообще применение функции system
system.Замена образа процесса
Существует целое семейство родственных функций, сгруппированных под заголовком exec
exec замещает текущий процесс новым, заданным в аргументе path или file. Функции exec можно применять для передачи выполнения вашей программы другой программе. Например, перед запуском другого приложения с политикой ограниченного применения вы можете проверить имя пользователя и пароль. Функции exec более эффективны по сравнению с system, т.к. исходная программа больше не будет выполняться после запуска новой программы.#include
char **environ;
int execl(const char *path, const char *arg0, ..., (char *)0);
int execlp(const char *file, const char *arg0, ..., (char *)0);
int execle(const char *path, const char *arg0, ..., (char *)0,
char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
Эти функции делятся на два вида. execl
execlp и execle принимают переменное число аргументов, заканчивающихся указателем null. У execv и execvp второй аргумент — массив строк. В обоих случаях новая программа стартует с заданными аргументами, представленными в массиве argv, передаваемом функции main.Эти функции реализованы, как правило, с использованием execve
Функции, имена которых содержат суффикс p
PATH для определения исполняемого файла новой программы. Если эта переменная не позволяет найти нужный файл, необходимо передать функции как параметр абсолютное имя файла, включающее каталоги.Передать значение окружению программы может глобальная переменная environ
execle и execve, способный передавать строки, используемые как окружение новой программы.Если вы хотите применить функцию exec
ps, можно выбирать любую функцию из семейства exec, как показано в вызовах приведенного далее фрагмента программного кода:#include
/* Пример списка аргументов */
/* Учтите, что для argv[0] необходимо имя программы */
char *const ps_argv[] = {"ps", "ax", 0};
/* He слишком полезный пример окружения */
char *const ps_envp[] = {"PATH=/bin:/usr/bin", "TERM=console", 0};
/* Возможные вызовы функций exec */
execl("/bin/ps", "ps", "ax", 0);
/* предполагается, что ps в /bin */
execlp("ps", "ps", "ax", 0);
/* предполагается, что /bin в PATH */
execle("/bin/ps", "ps", "ax", 0, ps_envp);
/* передается свое окружение */
execv("/bin/ps", ps_argv);
execvp("ps", ps_argv);
execve("/bin/ps", ps_argv, ps_envp);
А теперь выполните упражнение 11.2.
execlpДавайте изменим пример и используем вызов execlp
#include
#include
#include
int main() {