Реферат Курсовая Конспект
Переключение процесса на выполнение другой программы - раздел Компьютеры, Процессы в ОС Linux (I) Семейство Функций Exec Содержит Набор Функций, Которые Перек...
|
Семейство функций exec содержит набор функций, которые переключают процесс на выполнение другой программы, т.е. изменяют образ процесса. При этом прекращается выполнение текущей программы и начинается выполнение в этом же процессе другой программы, начиная с ее точки входа. Функции семейства exec различаются набором аргументов:
· Функции, которые содержат в имени букву p (execvp и execlp), принимают имя программы и ищут программу по имени во всех путях, содержащихся в PATH; в функции, не содержащие в имени букву p, должно быть передано полное имя пути программы.
· Функции, которые содержат в имени букву v (execv, execvp и execve), принимают список параметров для новой программы как массив указателей на строки с последним нулевым элементом. Каждая строка соответствует одному параметру. В функции, содержащие в имени букву l (execl, execlp, execle), параметры передаются как параметры соответствующей функции exec.
· Функции, которые содержат в имени букву e (execve и execle), принимают дополнительный параметр - массив переменных окружения. Этот параметр должен быть массивом указателей на строки, с последним нулевым элементом. Каждая строка должна иметь вид "ПЕРЕМЕННАЯ=значение".
Т.к. exec заменяет вызывающую программу на другую, то exec никогда не возвращает управление в вызывающую программу в случае успеха. Таким образом, код, находящийся после exec, будет выполнен только в случае ошибки в вызове exec.
Список параметров, передаваемых в вызываемую программу, является аналогом параметров командной строки. Первым параметром (*argv[0]) в нем должно быть имя программы.
Один из вариантов запуска новых программ - в основной программе создать дочерний процесс (fork) и в нем переключиться на другую программу (exec), как в задании 5:
Задание 5.
5.1. Выполните программу pr5.c, которая в дочернем процессе вызывает программу ls с теми же параметрами, что и в задании 3. Определите, какой оператор(ы) никогда не выполняется в случае успешного выполнения exec.
/* pr5.c */
#include <stdio.h>
#include <unistd.h>
int main()
{
char* arg_list[] = {"ls", "-l", "/", NULL};
if (fork() == 0)
{
execvp("ls", arg_list);
printf("Return after execn");
}
return 0;
}
5.2. Модифицируйте программу: замените execvp на execlp:
execlp("ls", "ls", "-l", "/", NULL);
5.3. Сделайте ошибку в вызове exec: а) укажите вместо "ls" имя несуществующей программы; б) задайте несуществующий каталог для ls. Различаются ли при выполнении случаи а) и б) ?
5.4. Модифицируйте программу: загрузите в дочерний процесс (используйте execl) любую вашу программу (например, печатающую "Hello, world" из лабораторной работы 2.
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Процессы в ОС Linux"
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Переключение процесса на выполнение другой программы
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов