Параллельное и распределенное программирование на С++ - Хьюз Камерон
Функции execl ()
Функции execl (), execle () и execlp () передают аргументы командной строки в виде списка. Количество аргументов командной строки должно быть известно во время компиляции.
• int execl(const char *path,const char *arg0,.../*,(char * )0 */);
Здесь path — путевое имя выполняемой программы. Его можно задать в виде полного составного имени либо относительного составного имени из текущего каталога. Последующие параметры представляют собой список аргументов командной строки, от arg0 до argn. Всего может быть n аргументов. Этот список завершается NULL -указателем.
• int execle(const char *path,const char *arg0,.../*,(char *)0 *, char *const envp[]*/);
Эта функция аналогична функции execl () с одним отличием: она имеет дополнительный параметр, envp[]. Этот параметр указывает на новую среду для нового процесса, т.е. envp[] — это указатель на строковый массив с завершающим нулевым символом. Каждая его строка, также завершающаяся нулевым символом, имеет следующую форму:
name=value
Здесь name — имя переменной среды, а value — сохраняемая строка. Значение параметру envp [] можно присвоить следующим образом:
char *const envp[] = {«PATH=/opt/kde2:/sbin», «HOME=/home»,NULL};
Здесь PATH и НОМЕ — переменные среды.
• int execlp(const char *file,const char *arg0,.../*, (char *)0 */);
Здесь file — имя выполняемой программы. Для определения местоположения выполняемых программ используется переменная среды PATH. Остальные параметры представляют собой список аргументов командной строки (см. описание функции execl() ) .
Вот примеры применения синтаксиса функций execl () с различными аргументами:
char *const args[] = {«direct»,".»,NULL};
char *const envp[] = {«files=50»,NULL};
execl("/path/direct», «direct», ".», NULL) ;
execle("/path/direct»,«direct»,".»,NULL,envp);
execlp(«direct», «direct», " . ",NULL) ;
Здесь в каждом примере вызова execl -функции активизированный процесс выполняет программу direct.
Синопсис
#include <unistd.h>
int execl(const char *path,const char *arg0,.../*,(char *)0 */);
int execle(const char *path,const char *arg0,.../*,(char *)0 *,char *const envp[]*/);
int execlp(const char *file,const char *arg0,.../*,(char *)0 */);
int execv(const char *path,char *const arg[]);
int execve(const char *path,char *const arg[],char *const envp[]); int execvp(const char *file,char *const arg[]);
Функции execv ()
Функции execv(), execve() и execvp() передают аргументы командной строки в векторе указателей на строки с завершающим нулевым символом. Количество аргументов командной строки должно быть известно во время компиляции. Элемент argv[0] обычно представляет собой команду.
• int execv(const char *path,char *const arg[]);
Здесь path — путевое имя выполняемой программы. Его можно задать в виде полного составного имени либо относительного составного имени из текущего каталога. Последующий параметр представляет вектор (с завершающим нулевым символом), содержащий аргументы командной строки, представленные в виде строк с завершающими нулевыми символами. Всего может быть n аргументов. Этот вектор завершается NULL-указателем. Элементу arg[] можно присвоить значение таким образом:
char *const arg[] = {«traverse»,".», ">",«1000»,NULL};
Вот пример вызова этой функции:
execv(«traverse», arg) ;
В этом случае утилита traverse перечислит все файлы в текущем каталоге, размер которых превышает 1000 байт.
• int execve(const char *path,char *const arg[],char *const envp[]);
Эта функция аналогична функции execv(), с одним отличием: она имеет дополнительный параметр, envp[], который описан выше.
• int execvp(const char *file,char *const arg[]);
Здесь file — имя выполняемой программы. Последующий параметр представляет собой вектор (с завершающим нулевым символом), содержащий аргументы командной строки, представленные в виде строк с завершающими нулевыми символами. Всего может быть n аргументов. Этот вектор завершается NULL-указателем.
Вот примеры применения синтаксиса функций execv () с различными аргументами:
char *const arg[] = {«traverse»,".», ">",«1000»,NULL};
char *const envp[] = {«files=50»,NULL};
execv("/path/traverse», arg);
execve("/path/traverse», arg, envp);
execvp(«traverse», arg);
Здесь в каждом примере вызова execv-функции активизированный процесс выполняет программу traverse.
Определение ограничений для функций exec ()
Существуют ограничения на размеры вектора argv[] и массива envp[], передаваемые функциям семейства exec. Для определения максимального размера аргументов командной строки и размера переменных среды при использовании exec-функций (которые принимают параметр envp [ ]) можно использовать функцию sysconf (). Чтобы эта функция возвратила размер, ее параметру name необходимо присвоить значение _SC_ARG_МАХ.
Синопсис
#include <unistd.h>
long sysconf(int name);
Еще одним ограничением при использовании функций семейства exec и других Функций, применяемых для создания процессов, является максимальное количество одновременно выполняемых процессов, которое допустимо для одного пользователя.
Чтобы функция sysconf() возвратила это число, ее параметру name необходимо присвоить значение _SC_CHILD_MAX.
Чтение и установка переменных среды
Переменные среды представляют собой строки с завершающими нулевыми символами, в которых хранится такая системная информация, как пути к каталогам, содержащим команды, библиотеки, функции и процедуры, используемые процессом. Их также можно использовать для передачи любых определенных пользователем данных между родительскими и сыновними процессами. Они обеспечивают механизм предоставления процессу специальной информации без необходимости жесткого ее связывания с кодом программы. Переменные среды предопределены системой и совместно используются всеми ее оболочками и процессами. Эти переменные инициализируются файлами запуска. Чаще всего используются следующие системные переменные.
$НОМЕ Полное составное имя каталога пользователя.
$РАТН Список каталогов для поиска выполняемых файлов при выполнении команд.
$MAIL Полное составное имя почтового ящика пользователя.
$USER Идентификатор (id) пользователя.
$SHELL Полное составное имя командной оболочки зарегистрированного пользователя.
$TERM Тип терминала пользователя.
Переменные среды могут храниться в файле или в списке, принадлежащем среде. Этот список среды содержит указатели на строки с завершающими нулевыми символами. Когда процесс начинает выполняться, переменная extern char **environ
будет указывать на список среды. Строки, составляющие список среды, имеют следующий формат: name=value
Процессы, инициализированные с помощью функций execl(), execlp(), execv() и execvp(), наследуют конфигурацию среды родительского процесса. Процессы, инициализированные с помощью функций execve() и execle(), сами устанавливают среду.
Существуют функции и утилиты, которые позволяют опросить, добавить или модифицировать переменные среды. Функция getenv() используется для определения факта установки заданной переменной. Интересующая вас переменная задается с помощью параметра name. Если заданная переменная не установлена, функция возвращает значение NULL. В противном случае (если переменная установлена), функция возвращает указатель на строку, содержащую ее значение.
Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Параллельное и распределенное программирование на С++ - Хьюз Камерон, относящееся к жанру Прочая околокомпьютерная литература. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.


