Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
<b>#include <unistd.h></b>
<b>char **environ;</b>
<b>int execl(const char *path, const char *arg0, ..., (char *)0);</b>
<b>int execlp(const char *file, const char *arg0, ..., (char *)0);</b>
<b>int execle(const char *path, const char *arg0, ..., (char *)0,</b>
<b> char *const envp[]);</b>
<b>int execv(const char *path, char *const argv[]);</b>
<b>int execvp(const char *file, char *const argv[]);</b>
<b>int execve(const char *path, char *const argv[], char *const envp[]);</b>
Эти функции делятся на два вида.
execl
execlp
execle
null
execv
execvp
argv
main
Эти функции реализованы, как правило, с использованием
execve
Функции, имена которых содержат суффикс
p
PATH
Передать значение окружению программы может глобальная переменная
environ
execle
execve
Если вы хотите применить функцию
exec
ps
exec
#include <unistd.h>
/* Пример списка аргументов */
/* Учтите, что для 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 <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
<i> printf("Running ps with execlpn");</i>
<i> execlp("ps", "ps", "ax", 0);</i>
printf("Done.n");
exit(0);
}
Когда вы выполните эту программу, рехес.с, то получите обычный вывод команды
ps
Done
рехес
$ <b>./рехес</b>
Running ps with execlp
PID TTY STAT TIME COMMAND
1 ? S 0:03 init [5]
...
1262 pts/1 Ss 0:00 /bin/bash
1273 pts/2 S 0:00 su -
1274 pts/2 S+ 0:00 -bash
1463 pts/1 SN 0:00 oclock
1465 pts/1 S 0:01 emacs Makefile
1514 pts/1 R+ 0:00 ps ax
Как это работает
Программа выводит первое сообщение и затем вызывает функцию
execlp
PATH
ps
рехес
$ <b>ps ax</b>
Когда
ps
рехес
nice
exec
Существует ограничение для общего размера списка аргументов и окружения процесса, запускаемого функциями
exec
ARG_MAX
ARG_MAX