mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

EXEC(2)                                                 EXEC(2)

НАЗВАНИЕ 
	exec: execl, execv, execle, execve,  execlp,  execvp   
	выполнение файла

СИНТАКСИС 
        int execl (path, arg0, arg1, ..., argn, (char*) 0)
        char *path, *arg0, *arg1, ..., *argn;
        
        int execv (path, argv)
        char *path, *argv [];
        
        int execle (path, arg0, arg1, ..., argn, (char*) 0, envp)
        char *path, *arg0, *arg1, ..., *argn, *envp [];
        
        int execve (path, argv, envp)
        char *path, *argv [], *envp [];
        
        int execlp (file, arg0, arg1, ..., argn, (char*) 0)
        char *file, *arg0, *arg1, ..., *argn;
        
        int execvp (file, argv)
        char *file, *argv [];

ОПИСАНИЕ 
	Все формы системного вызова exec  превращают  вызвавший
	процесс в новый процесс, который строится  из  обычного
	выполняемого  файла,  называемого  в  дальнейшем  новым
	выполняемым файлом. Выполняемый файл состоит  из  заго-
	ловка [см. a.out(4)], сегмента команд (.text) и данных.
	Данные состоят из инициализированной (.data) и неиници-
	ализированной (.bss) частей. Если системный вызов  exec
	закончился успешно, то он не может вернуть  управление,
	так как вызвавший процесс уже заменен новым процессом.

	При запуске C-программы ее вызывают следующим образом:

	     main (argc, argv, envp)
	     int argc;
	     char **argv, **envp;

	где argc равен количеству  аргументов,  argv  -  массив
	указателей собственно на аргументы и envp - массив ука-
	зателей на цепочки символов, образующие окружение. При-
	нято соглашение, по которому значение argc не меньше 1,
	а первый элемент массива argv указывает на цепочку сим-
	волов, содержащую имя нового выполняемого файла.

	Аргументам системных вызовов группы exec приписан  сле-
	дующий смысл.

	Аргумент path указывает на маршрутное имя нового выпол-
	няемого файла.

	Как и path, аргумент file указывает  новый  выполняемый
	файл, но маршрут этого файла определяется в  результате
	просмотра каталогов, переданных через переменную  окру-
	жения PATH [см. environ(5)].  Окружение  поддерживается
	shell'ом [см. sh(1)].

	Аргументы arg0, arg1, ..., argn - это указатели на  це-
	почки символов, ограниченные нулевыми байтами. Эти  це-
	почки образуют доступный новому процессу  список  аргу-
	ментов. По соглашению, как  минимум  arg0  должен  при-
	сутствовать и указывать  на  цепочку  символов,  равную
	path (или последнему компоненту path).

	Массив argv содержит указатели на цепочки символов, ог-
	раниченные нулевыми байтами. Эти цепочки образуют  дос-
	тупный новому процессу список аргументов.  По  соглаше-
	нию, в argv должен присутствовать  как  минимум  первый
	элемент, указывающий на цепочку символов,  равную  path
	(или последнему компоненту path). За последним  занятым
	элементом массива argv должен следовать  пустой  (нуле-
	вой) указатель.

	Массив envp содержит указатели на цепочки символов, ог-
	раниченные нулевыми байтами. Эти цепочки образуют окру-
	жение нового процесса. За последним  занятым  элементом
	массива envp должен следовать пустой указатель.

	Перед началом выполнения любой программы во внешнюю пе-
	ременную environ, описание которой выглядит как

	     extern char **environ;

	помещается адрес массива указателей на  цепочки  симво-
	лов,  образующие окружение процесса. С помощью этой пе-
	ременной (как и с помощью аргумента envp функции  main)
	в новом процессе всегда можно получить доступ к окруже-
	нию, независимо от использовавшегося варианта системно-
	го  вызова exec. Разница лишь в том, что в случае вызо-
	вов execle и execve окружение нового процесса  задается
	явно,  а  в  остальных случаях наследуется у вызвавшего
	процесса.

	Файлы, открытые в вызвавшем процессе, остаются открыты-
	ми в новом процессе, за исключением тех, у которых  ус-
	тановлен флаг "закрыть при выполнении вызова exec" [см.
	fcntl(2)]. Если файл остался открытым, то указатель те-
	кущей позиции в файле сохраняется.

	Реакция  на  сигналы  сохраняется, за исключением того,
	что сигналы, которые перехватывались в  вызвавшем  про-
	цессе,  вызывают  терминирование  нового  процесса [см.
	signal(2)].

	В  случае, когда реакция на сигналы устанавливалась вы-
	зовом sigset(2) и задавалась как SIG_DFL,  SIG_IGN  или
	SIG_HOLD,  эта реакция наследуется у вызвавшего процес-
	са. Однако, если сигнал перехватывался, то устанавлива-
	ется реакция SIG_DFL и все полученные, но не обработан-
	ные сигналы этого типа откладываются.

	Если у нового выполняемого файла установлен бит  разре-
	шения переустанавливать действующий идентификатор поль-
	зователя  [см.  chmod(2)], то действующий идентификатор
	пользователя  нового  процесса  устанавливается  равным
	идентификатору  владельца  нового  выполняемого  файла.
	Аналогично, если у нового выполняемого файла установлен
	бит разрешения переустанавливать действующий  идентифи-
	катор группы, то действующий идентификатор группы ново-
	го процесса устанавливается равным идентификатору груп-
	пы  нового  выполняемого  файла. Реальный идентификатор
	пользователя и  реальный  идентификатор  группы  нового
	процесса наследуются у вызвавшего процесса.

	Присоединенные разделяемые сегменты памяти не  наследу-
	ются новым процессом [см. shmop(2)].

	У нового процесса выключено профилирование.

	Кроме того, новый процесс наследует у процесса, вызвав-
	шего exec, следующие характеристики:

	1.   Значение поправки к приоритету [см. nice(2)].

	2.   Идентификатор процесса.

	3.   Идентификатор родительского процесса.

	4.   Идентификатор группы процессов.

	5.   semadj значения [см. semop(2)].

	6.   Идентификатор группы терминала [см. exit(2)].

	7.   Режим трассировки [см. ptrace(2)].

	8.   Время,  оставшееся до срабатывания будильника [см.
	     alarm(2)].

	9.   Текущий рабочий каталог.

	10.  Корневой каталог.

	11.  Маска режима создания файлов [см. umask(2)].

	12.  Ограничение на размер файла [см. ulimit(2)].

	13.  Счетчики  времени,  потраченного  для обслуживания
	     этого процесса (tms_utime, tms_stime,  tms_cutime,
	     tms_cstime) [см. times(2)].

	14.  Блокировки   доступа   к   сегментам  файлов  [см.
	     fcntl(2) и lockf(3C)].

	Системный вызов exec завершается неудачей и  управление
	возвращается,  если выполнено хотя бы одно из следующих
	условий:

	[ENOENT]    Компонент маршрута нового выполняемого фай-
		    ла не существует.

	[ENOTDIR]   Компонент маршрута нового выполняемого фай-
		    ла не является каталогом.

	[EACCES]    Один из каталогов, перечисленных в маршруте
		    нового выполняемого файла, не доступен  для
		    просмотра.

	[EACCES]    Новый  выполняемый файл не является обычным
		    файлом.

	[EACCES]    Нет прав на выполнение нового файла.

	[ENOEXEC]   Права на выполнение нового файла  есть,  но
		    его  заголовок  не начинается с допустимого
		    магического числа [см. a.out(4)].

	[ETXTBSY]   Новый выполняемый файл в  настоящий  момент
		    открыт для записи некоторым процессом.

	[ENOMEM]    Новый процесс требует  больше  памяти,  чем
		    позволяет системное ограничение MAXMEM.

	[E2BIG]     Суммарная длина списка аргументов превышает
		    системное ограничение, равное 5120 байт.

	[EFAULT]    Отсутствует требуемое оборудование.

	[EFAULT]    Некорректные адреса в качестве аргументов.

	[EAGAIN]    Не хватает памяти.

	[ELIBACC]   К  требуемой разделяемой библиотеке не раз-
		    решен доступ на выполнение.

	[ELIBEXEC]  Попытка непосредственно выполнить разделяе-
		    мую библиотеку.

	[EINTR]     Во время выполнения вызова exec  перехвачен
		    сигнал.

	[ENOLINK]   Аргумент path указывает на удаленный компь-
		    ютер, связи с которым в данный момент нет.

	[EMULTIHOP] Компоненты path требуют многократного обра-
		    щения к удаленным компьютерам.

СМ. ТАКЖЕ 
	alarm(2),    exit(2),   fcntl(2),   fork(2),   nice(2),
	ptrace(2), semop(2),  shmop(2),  signal(2),  sigset(2),
	times(2),  ulimit(2),  umask(2),  lockf(3C),  a.out(4),
	environ(5).
	sh(1) в Справочнике пользователя.

ДИАГНОСТИКА 
	Возврат из системного вызова  exec  свидетельствует  об
	ошибке. В таком случае результат равен -1, а переменной
	errno присваивается код ошибки.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк