9.1.4.2. Функции-оболочки: execl() и др.

9.1.4.2. Функции-оболочки: execl() и др.

Пять дополнительных функций, действующих в качестве оболочек, предоставляют более удобные интерфейсы для execve(). В первой группе все принимают список аргументов, каждый из которых передается в виде явного параметра функции:

int execl(const char *path, const char *arg, ...)

Первый аргумент, path, является путем к исполняемому файлу. Последующие аргументы, начиная с arg, являются отдельными элементами, которые должны быть помещены в argv. Как и ранее, явным образом должен быть включен argv[0]. Вы должны в качестве последнего аргумента передать завершающий указатель NULL, чтобы execl() смогла определить, где заканчивается список аргументов. Новая программа наследует любые переменные окружения, которые находятся в переменной environ.

int execlp(const char *file, const char *arg, ...)

Эта функция подобна execl(), но она имитирует механизм поиска команд оболочки, разыскивая file в каждом каталоге, указанном в переменной окружения PATH. Если file содержит символ /, этот поиск не осуществляется. Если PATH в окружении не присутствует, execlp() использует путь по умолчанию. В GNU/Linux по умолчанию используется ":/bin:/usr/bin", но в других системах может быть другое значение. (Обратите внимание, что ведущее двоеточие в PATH означает, что сначала поиск осуществляется в текущем каталоге.)

Более того, если файл найден и имеет право доступа на исполнение, но не может быть исполнен из-за того, что неизвестен его формат, execlp() считает, что это сценарий оболочки и запускает оболочку с именем файла в качестве аргумента.

int execle(const char *path, const char *arg, ...,

 char *const envp[])

Эта функция также подобна execl(), но принимает дополнительный аргумент, envp, который становится окружением новой программы. Как и в случае с execl(), вы должны для завершения списка аргументов поместить перед envp указатель NULL.

Вторая группа функций-оболочек принимает массив в стиле argv:

int execv(const char *path, char *const argv[])

Эта функция подобна execve(), но новая программа наследует любое окружение, которое находится в переменной environ текущей программы.

int execvp(const char *file, char *const argv[])

Эта функция подобна execv(), но она осуществляет такой же поиск в PATH, как и функция execlp(). Она также переходит на исполнение сценария оболочки, если найденный файл не может быть исполнен непосредственно.

В табл. 9.1 подведены итоги для шести функций exec().

Таблица 9.1. Сводка семейства функций exec() по алфавиту

Функция Поиск пути Окружение пользователя Назначение
execl() ? Исполняет список аргументов.
execle() Исполняет список аргументов с окружением.
execlp() ? ? Исполняет список аргументов с поиском пути
execv() ? Исполняет с argv
execve() Исполняет с argv и окружением (системный вызов).
execvp() ? ? Исполняет с argv и с поиском пути

Функций execlp() и execvp() лучше избегать, если вы не знаете, что переменная окружения PATH содержит приемлемый список каталогов.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

3.2. Настройка оболочки Windows

Из книги автора

3.2. Настройка оболочки Windows Теперь, после того как новый интерфейс и новые возможности Windows Vista вас не пугают, займемся подробным описанием нового интерфейса операционной системы Windows Vista и возможностей его настройки.Настройка меню Пуск и Панели задачНовые меню Пуск и


1.10 Элементы программирования оболочки

Из книги автора

1.10 Элементы программирования оболочки В предыдущих главах мы рассматривали язык оболочки с точки зрения, в основном, непосредственного исполнения вводимых команд. Теперь взглянем на него под другим углом: как на универсальный язык программирования, а на оболочку – как


Сценарии оболочки

Из книги автора

Сценарии оболочки Наш затянувшийся разговор о командах и командном интерфейсе подходит к концу. И в заключение этого раздела — ещё немного терпения. Потому что было бы несправедливо не уделить чуть-чуть места тому, что придает командному интерфейсу POSIX-систем его


5.6.2 Приглашения оболочки

Из книги автора

5.6.2 Приглашения оболочки Одна из очень важных переменных имеет имя PS1. Эта переменная задает вид приглашения, которое bash выводит, когда ожидает ввода очередной команды пользователем. По умолчанию этой переменной присвоено значение "s-v$ ". Вообще-то в bash существует четыре


Глава 5 Настройка оболочки

Из книги автора

Глава 5 Настройка оболочки В предыдущей главе была полностью рассмотрена структура корневого раздела HKEY_CLASSES_ROOT. Структура остальных корневых разделов в этой книге рассматриваться не будет, так как она по своей природе не статична — нельзя точно предположить, какое


Определение оборудования оболочки

Из книги автора

Определение оборудования оболочки Служба отвечает за автоматический запуск содержимого компакт-дисков или подключенной флэш-карты. После отключения этой службы из диалога свойств съемных дисков или компакт-дисков исчезнет вкладка Автозапуск, а также будет отключена


Компоненты-оболочки для Services API

Из книги автора

Компоненты-оболочки для Services API TIBConfigService - предназначен для настройки параметров базы данных. TIBBackupService предназначен для создания резервных копий (backup) баз данных. TIBRestoreService - предназначен для восстановления базы данных из резервной копии. TIBValidationService - предназначен


1.10 Элементы программирования оболочки

Из книги автора

1.10 Элементы программирования оболочки В предыдущих главах мы рассматривали язык оболочки с точки зрения, в основном, непосредственного исполнения вводимых команд. Теперь взглянем на него под другим углом: как на универсальный язык программирования, а на оболочку — как


Пространство имен оболочки

Из книги автора

Пространство имен оболочки BrowseCallbackProc Функция BrowseCallbackProc представляет собой определяемую приложением функцию обратного вызова, используемую совместно с функцией SHBrowseForFolder . Диалоговое окно выбора папки вызывает эту функцию для уведомления о событиях. Тип BFFCALLBACK


Библиотека оболочки

Из книги автора

Библиотека оболочки DragAcceptFiles Функция DragAcceptFiles регистрирует окно, если оно принимает перетаскиваемые на него файлы. VOID DragAcceptFiles ( HWND hWnd , // дескриптор окна BOOL fAccept // опция разрешения принятия файлов ); Параметры hWnd - идентифицирует окно, регистрируемое, если оно принимает


Загрузочные оболочки

Из книги автора

Загрузочные оболочки Началу работы операционной системы предшествует ее загрузка. Стандартные возможности Windows не позволяют сделать загрузчик более привлекательным и продуктивным. Эту проблему успешно решают программы сторонних разработчиков, позволяющие оформить


Сканирование радужной оболочки

Из книги автора

Сканирование радужной оболочки Из всех известных систем биометрической идентификации сканирование радужной оболочки является наиболее точным и стабильным. Тонкий узор на радужке формируется еще до рождения и остается неизменным на протяжении всей жизни (кроме