выполнение родительской программы задерживается до
Таблица 9
P_WAIT | выполнение родительской программы задерживается до завершения дочерней программы. |
P_NOWAIT | родительская программа продолжает выполнение сразу после запуска дочерней. Этот параметр имеет смысл только для операционных систем OS/2, UNIX, в которых поддерживается мультизадачность. |
P_OVERLAY | загружает программу как оверлей и передает ей управление. Этот режим соответствует функции exec в том смысле, что родительская программа не получит управления после завершения дочерней. |
В качестве примера использования функций запуска программы рассмотрим возможное решение проблемы создания HELP-системы для прикладной программы.
С помощью текстового редактора можно создать справочную базу данных в формате утилиты Microsoft HELPMAKE, затем, запуская в нужный момент диалоговую утилиту работы с базой данных Microsoft Quick Help QH.EXE, можно получить нужную справку.
Утилита QH использует базы данных, описанные в переменной среды HELPFILES. Мы будем использовать либо родительскую среду, где находится значение переменной HELPFILES по умолчанию, либо указывать новое значение для этой переменной.
Приведенная ниже программа используется для получения справки о функции стандартной библиотеки printf, поиск производится в HELP-базе QuickC:
#include <stdio.h> #include <conio.h> #include <process.h>
main() { int r;
// Получаем справку о функции printf, // справочная база данных расположена // в каталоге d:\qc2\bin
r = help("HELPFILES=d:\\qc2\\bin;","printf");
if( r == -1 ) printf( "Невозможно запустить процесс" ); else printf( "\nПроцесс завершен" ); exit(r); }
/** *.Name help * *.Title Получить справку по заданному контексту * *.Descr Функция получает в качестве параметров * переменную среды, указывающую на путь * к справочной базе данных и указатель * на строку контекста для поиска в базе. * Затем запускается как дочерний процесс * утилита Microsoft Quick Help QH.EXE, для * которой формируются среда и параметры. * *.Params int help(char *help_file, char *help_topic); * * help_file - переменная среды, указывающая * на путь к справочной базе * * help_topic - контекст для поиска в базе * * *.Return 0 при успешном запуске процесса * -1 не удалось запустить процесс **/
int help(char *help_file, char *help_topic) {
char *env[] = { "", NULL }; // Среда, которую // получит QH при запуске
if(*help_file != 0) { env[0] = help_file; // Формируем среду для QH
// Запускаем утилиту
return(spawnlpe(P_WAIT,"QH","QH", "-u",help_topic,NULL,env)); } else {
// Если переменная среды не задана, // используем родительскую среду
return(spawnlp(P_WAIT,"QH","QH", "-u",help_topic,NULL));
} }
Подробная информация об использовании утилит HELPMAKE и QH приводится в документации на Microsoft C 6.0.
Содержание Назад Вперед