Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Выполнение Файла




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

Функции отличаются определением аргументов, но они выполняют одну и ту же операцию. Все функции объявлены в заглавном файле "unistd.h".

int execv (const char *filename, char *const argv[]) (функция)

Функция execv выполняет файл, название которого находится в filename, как новый образ процесса.

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

Среда для нового образа процесса создается из переменных среды текущего образа процесса.

int execl (const char *filename, const char *arg0,...)

Подобна execv, но строки argv определены индивидуально, а не как массив. Пустой указатель должен быть передан как последний такой аргумент.

int execve (const char *filename, char *const argv[], char *const env[])

Подобна execv, но разрешает Вам определять среду для новой программы явно как аргумент env.

int execle (const char *filename, const char *arg0, char *const env[],...)

Подобна execl, но разрешает определять среду для новой программы явно. Аргумент среды передается после пустого указателя, который отмечает последний аргумент argv, и должен быть массивом строк.

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

Execvp функция подобна execv, за исключением того, что она ищет исполняемый файл в каталогах, перечисленных в переменной среды PATH, если filename не содержит правый слэш.

Эта функция полезна для утилит системы. Программные оболочки используют ее, чтобы выполнить команды написанные пользователем.

int execlp (const char *filename, const char *arg0,...)

Эта функция - подобна execl, за исключением того, что она выполняет тот же поиск имени файла как и execvp.

Размер списка параметров и списка среды, вместе не должен быть больше чем ARG_MAX байт. В системе GNU, размер (который сравнивается c ARG_MAX) включает, для каждой строки, число символов в строке, плюс размер char*, плюс один, округленный вверх после умножения на размер char*. Другие системы могут иметь несколько отличные правила для подсчета.

Эти функции обычно не возвращают управление в вызывающий процесс, так как выполнение новой программы заставляет завершиться программу выполнения немедленно. Значение -1 возвращается в случае ошибки. В дополнение к обычным синтаксическим ошибкам имени файла, определены следующие коды ошибки errno для этих функций:

E2BIG

объединенный размер списка параметров новой программы и списка среды больше чем ARG_MAX байт.

Система GNU не имеет никакого специфического ограничения размера списка параметров, так что этот код ошибки никогда не возвращается, но возможно, что будет возвращен код ENOMEM если аргументы слишком велики для доступной памяти.

ENOEXEC

заданный файл не может быть выполнен из-за его неверного формата

ENOMEM

выполнение заданного файла требует большего количества памяти, чем доступно.

Если выполнение нового файла прошло успешно, то модифицируется поле времени доступа к файлу, как будто файл был прочитан.

Выполнение нового образа процесса не изменяет полностью содержимое памяти, копируются только аргументы и строки среды. Но множество других атрибутов процесса не изменяются:

· ID процесса и ID родительского процесса

· групповая принадлежность сеанса и процесса

· реальный пользовательский ID, ID группы, и дополнительный ID группы

· отложенные таймеры

· текущий рабочий каталог и корневой каталог

· маска режима создаваемого файла

· маска сигналов процесса

· отложенные сигналы

· время выполнения процесса.

Сигналы, которые игнорируются в существующем образе процесса, также будут установлены, чтобы игнорироваться в новом образе процесса. Все другие сигналы будут установлены по умолчанию в новом образе процесса.

Дескрипторы файлов, открытые в существующем образе процесса, остаются открытыми в новом образе процесса, если для них не установлен флаг FD_CLOEXEC. Файлы, которые остаются открытыми, наследуют все атрибуты описания открытого файла из существующего образа процесса, включая блокировки файла.

Новый образ процесса не имеет никаких потоков за исключением тех, что он создает заново.

Каждый из потоков в предыдущем образе процесса имеет описатель, и эти описатели остаются после exec (если они не имеют FD_CLOEXEC). Новый образ процесса может повторно соединять их с новыми потоками, используя fdopen.




Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 487; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.