| |
Функция exec() (execute) загружает и запускает другую программу. Таким образом, новая программа полностью замещает текущий процесс. Новая программа начинает свое выполнение с функции main. Все файлы вызывающей программы остаются открытыми. Они также являются доступными новой программе. Используется шесть различных вариантов функций exec.
#include <unistd.h> int execl(char *name, char *arg0, ... /*NULL*/); int execv(char *name, char *argv[]); int execle(char *name, char *arg0, ... /*,NULL, char *envp[]*/); int execve(char *name, char *arv[], char *envp[]); int execlp(char *name, char *arg0, ... /*NULL*/); int execvp(char *name, char *argv[]);Вызов exec происходит таким образом, что переданная в качестве аргумента программа загружается в память вместо старой, которая вызвала exec. Старой программе больше не доступны сегменты памяти, которые перезаписаны новой программой.
Суффиксы l, v, p, e в именах функций определяют формат и объем аргументов, а также каталоги, в которых нужно искать загружаемую программу:
#include <stdio.h> int main(int argc, char *argv[]) { int i=0; printf("%s\n",argv[0]); printf("Программа запущена и получила строку : "); while(argv[++i] != NULL) printf("%s ",argv[i]); return 0; }Эта программа выводит на экран строку, переданную ей в качестве аргумента. Пусть она называется hello. Она будет вызвана из другой программы с помощью функции execl(). Код вызывающей программы приведен ниже :
#include <stdio.h> #include <unistd.h> int main(int argc, int *argv[]) { printf("Будет выполнена программа %s...\n\n", argv[0]); printf("Выполняется %s", argv[0]); execl("hello"," ","Hello", "World!", NULL); return 0; }В строке execl() аргументы указаны в виде списка. Доступ к ним также осуществляется последовательно. Если использовать функцию execv(), то вместо списка будет указан вектор аргументов:
#include <stdio.h> #include <unistd.h> int main(int argc, int *argv[]) { printf("Программа %s будет выполнена...\n\n", argv[0]); printf("Выполняется %s", argv[0]); execv("hello",argv); return 0; }
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |