Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Spawnlp

CuBook05

Функция spawnlp подобна функции execlp, но обладает более широкими возможностями. Она и используемые в ней константы описаны в файлах process.h и stdio.h.
Объявление функции:
int spawnlp(int mode, char *path, char *arg0, argl, ..., argn, NULL)
Функция spawnlp отличается от execlp наличием параметра mode, задающего режим выполнения приложения, запускаемого на выполнение. Этот параметр может, в частности, принимать следующие значения:
Значение Описание
P_WAIT Родительское приложение ждет завершения вызванного приложения, после чего продолжается его выполнение.
P_NOWAIT Родительское приложение продолжает выполняться пока выполняется вызванное приложение. Этот режим недоступен в 16-разрядных Windows и DOS.
P_DETACH Идентичен P_NOWAIT, но вызванное приложение выполняется в фоновом режиме, так что не имеет доступа к клавиатуре и дисплею.
P_OVERLAY Вызванное приложение замещает в памяти родительское. То же, что вызов функции execlp.
 
Пример

Операторы запускают архиватор arj, извлекающий из архива doc.arj файл a1.txt. Приложение ждет, пока программа arj закончит работу, затем загружает разархивированный файл в окно редактирования Memo1 и удаляет этот файл с диска.
if(spawnlp(P_WAIT,"arj","arj","e doc.arj a1.txt", NOLL))
ShowMessage("Программа arj не выполнена");
else
{
Memo1->Clear();
Memo1->Lines->LoadFromFile("a1.txt");
DeleteFile("a1.txt");
}
В приведенном примере все аргументы, передаваемые в порождаемый процесс, объединены в одной строке. Тот же самый результат получился бы, если передать их все в отдельности:
if(spawnlp(P_WAIT,"arj","arj","e","doc.arj","a1.txt", NULL))
Операции невозможно было бы выполнить функцией execlp, поскольку она не обеспечивает возвращение в исходное приложение. Нельзя было бы выполнить эти операции и функцией spawnlp при режиме, отличном от P_WAIT, поскольку в этом случае оператор загрузки файла в окно редактирования выполнялся бы раньше, чем успевал распаковываться архив.
 
Надо отметить, что приведенный выше пример разархивации файла обладает двумя недостатками. Первый из них связан с тем, что выполняется программа arj, предназначенная для DOS. Поэтому при ее выполнении вызывается сеанс DOS, и после его окончания пользователь видит окно DOS, которое ему надо закрыть, чтобы продолжить работу. Это, конечно, очень неудобно. Устранить этот недостаток легко, например, написанием пакетного файла arj.bat вида:
@echo off
arj.exe e doc %1
exit
Обращение к пакетному файлу arj.bat позволяет порожденному процессу автоматически, без вмешательства пользователя вернуться в родительский процесс. Но остается еще один недостаток рассмотренного примера, т.е. на время выполнения разархивации получаются неприятные изменения экрана, связанные с выходом в DOS.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий