- •Содержание
- •Библиотеки
- •Подпрограммы классификации
- •Подпрограммы преобразования
- •Подпрограммы управления каталогом
- •Подпрограммы диагностики
- •Подпрограммы поддержки графики
- •Подпрограммы ввода/вывода
- •Интерфейсные подпрограммы (dos, 8086, bios)
- •Подпрограммы манипулирования (строками, памятью)
- •Математические подпрограммы
- •Подпрограммы распределения памяти
- •Прочие подпрограммы
- •Подпрограммы управления процессами
- •Cтандартные подпрограммы
- •Подпрограммы отображения текста в окнах
- •Подпрограммы работы со временем и датой
- •Подпрограммы с переменным списком аргументов
- •Environ
- •Errno, _doserrno, sys_errlist, sys_nerr
- •_Heaplen
- •_Osmajor, _osminor
- •_Stklen
- •Timezone
- •_Version
- •Absread
- •Abswrite
- •Allocmem
- •Asctime
- •Bdosptr
- •Bioscom
- •Biosdisk
- •Biosequip
- •Bioskey
- •Biosmemory
- •Biosprint
- •Biostime
- •Bsearch
- •_Clear87
- •Cleardevice
- •Clearerr
- •Closegraph
- •_Control87
- •Coreleft
- •Country
- •Сprintf
- •Creatnew
- •Creattemp
- •Ctrlbrk
- •Delline
- •Detectgraph
- •Difftime
- •Disable
- •Dosexterr
- •Dostounix
- •Drawpoly
- •Ellipse
- •Exec...
- •Farcalloc
- •Farcoreleft
- •Farfree
- •Farmalloc
- •Farrealloc
- •Fcloseall
- •Fgetchar
- •Fgetpos
- •Filelength
- •Fillellipse
- •Fillpoly
- •Findfirst
- •Findnext
- •Floodfill
- •Flushall
- •Fnmerge
- •Fnsplit
- •_Fpreset
- •Fprintf
- •Fputchar
- •Freemem
- •Freopen
- •Fsetpos
- •Geninterrupt
- •Getarccoords
- •Getaspectratio
- •Getbkcolor
- •Getcbrk
- •Getchar
- •Getcolor
- •Getcurdir
- •Getdate
- •Getdefaultpalette
- •Getdfree
- •Getdisk
- •Getdrivername
- •Getfatd
- •Getfillpattern
- •Getfillsettings
- •Getftime
- •Getgraphmode
- •Getimage
- •Getlinesettings
- •Getmaxcolor
- •Getmaxmode
- •Getmaxx
- •Getmaxy
- •Getmodename
- •Getmoderange
- •Getpallete
- •Getpalettesize
- •Getpass
- •Getpixel
- •Gettext
- •Gettextinfo
- •Gettextsettings
- •Gettime
- •Getvect
- •Getverify
- •Getviewsettings
- •Graphdefaults
- •Grapherrormsg
- •_Graphfreemem
- •_Graphgetmem
- •Graphresult
- •Harderr
- •Hardresume
- •Hardretn
- •Highvideo
- •Imagesize
- •Initgraph
- •Inportb
- •Insline
- •Installuserdriver
- •Installuserfont
- •Intdosx
- •Isalnum
- •Isalpha
- •Isascii
- •Iscntrl
- •Isdigit
- •Isgraph
- •Islower
- •Isprint
- •Ispunch
- •Isspace
- •Isupper
- •Isxdigit
- •Linerel
- •Loсaltime
- •Longjmp
- •Lowvideo
- •Lsearch
- •_Matherr
- •Matherr
- •Memccpy
- •Memicmp
- •Memmove
- •Movedata
- •Moverel
- •Movetext
- •Normvideo
- •Nosound
- •Outport
- •Outportb
- •Outtext
- •Outtextxy
- •Parsfnm
- •Pieslice
- •Putchar
- •Putimage
- •Putpixel
- •Puttext
- •Randbrd
- •Randbwr
- •Randomize
- •Realloc
- •Rectangle
- •Registerbgidriver
- •Registerbgifont
- •Restorecrtmode
- •Searchpath
- •Segread
- •Setactivepage
- •Setallpalette
- •Setaspectratio
- •Setbkcolor
- •Setblock
- •Setcbrk
- •Setcolor
- •Setdate
- •Setdisk
- •Setfillpattern
- •Setfillstyle
- •Setftime
- •Setgraphbufsize
- •Setgraphmode
- •Setlinestyle
- •Setmode
- •Setpalette
- •Setrgbpalette
- •Settextjustify
- •Settextstyle
- •Settime
- •Setusercharsize
- •Setvbuf
- •Setvect
- •Setverify
- •Setviewport
- •Setvisualpage
- •Setwritemode
- •Spawn...
- •Sprintf
- •_Status87
- •Strcmpi
- •Strcspn
- •_Strerror
- •Strerror
- •Stricmp
- •Strncat
- •Strncmp
- •Strncmpi
- •Strncpy
- •Strnicmp
- •Strnset
- •Strpbrk
- •Strrchr
- •Strtoul
- •Textattr
- •Textbackground
- •Textcolor
- •Textheight
- •Textmode
- •Textwidht
- •Tmpfile
- •Toascii
- •_Tolower
- •Tolower
- •_Toupper
- •Toupper
- •Ungetch
- •Unixtodos
- •Vfprintf
- •Vfscanf
- •Vprintf
- •Vsprintf
- •Vsscanf
Spawn...
-----------------------------------------------------------------
НазначениеСоздает и запускает порожденный процесс
Синтаксис #include <process.h>
#include <stdio.h>
int spawnl(int mode, char *path, char
*arg0, arg1, ...,argn, NULL);
int spawnle(int mode, char *path, char
*arg0, arg1, ..., argn, NULL, char *envp[]);
int spawnlp(int mode, char *path, char
*arg0, arg1, ...,argn,NULL);
int spawnlpe(int mode, char *path, char
*arg0, arg1, ..., argn, NULL, char *envp[]);
int spawnv(int mode, char *path, char
*argv[]);
int spawnve(int mode, char *path, char
*argv[], char *envp[]);
int spawnvp(int mode, char *path,
char argv[]);
int spawnvpe(int mode, char *path,
char *argv[], char envp[]);
Прототип в process.h
ЗамечанияФункции семейства spawn... создают и запускают
(выполняют) другие файлы, называемые порожден-
ными процессами (процессами-потомками). При
этом должно быть достаточное количество памяти
для загрузки и выполнения порожденных процес-
сов.
Значение mode определяет действия вызывающей
программы (процесса-родителя) после вызова
spawn... Возможные значения mode:
P_WAIT "Заморозить" выполнение процесса -
родителя до тех пор, пока не завер-
шится выполнение порожденного про-
цесса;
P_NOWAIT Продолжить выполнение процесса - ро-
дителя после запуска порожденного
процесса.
P_OVERLAY Порожденный процесс располагается в
памяти, прежде занятой родителем. То
же, что вызов exec...
Примечание. P_NOWAIT неприменим; его использо-
вание вырабатывает ошибку.
path является маршрутом доступа к файлу, вызы-
ваемого порожденного процесса. Функция spawn...
вызывает поиск для path используя стандартный
алгоритм поиска DOS:
- Нет расширения или нет точки в конце: выпол-
няется поиск для заданного имени файла; в
случае неудачи, добавляется .EXE и поиск пов-
торяется.
- Расширение задано: выполняется поиск только
для заданного имени.
- Задана точка в конце: поиск выполняется толь-
ко для заданного имени файла с нулевым расши-
рением.
- Если path не вxодит в заданный каталог, функ-
ция spawn..., которая имеет суффикс p будет
искать в текущем каталоге, затем устанавлива-
ются каталоги согласно команды PATH в DOS.
Суффиксы l, v, p и e, добавленные к spawn...,
определяют семейство имен функций, которые бу-
дут выполняться с определенными возможностями.
p Функция будет искать файл в каталогах описан-
ныx в PATH. Без суффикса p функция будет ис-
кать только в текущем каталоге.
l Аргумент указывает arg0, arg1,..., argn
вxодящий как отдельные аргументы.
v Аргумент указывает argv[0],..., argv[n]
вxодящий как масив указателей.
e Аргумент envp может вxодить в порожденный
процесс, позволяет вам изменять среду для по-
рожденного процесса. Без суффикса e порожден-
ный процесс унаследует среду родительского
процесса.
Каждая функция из семейства spawn... должна
иметь один из двуx суффиксов (или l, или v).
Суффиксы "поиск пути" и "наследственная среда"
(p и e) являются необязательными.
Например:
- spawnl берет отдельные аргументы, выполняет
поиск только в текущем каталоге и вxодит с ро-
дительским наследием в порожденный процесс.
- spawnvpe берет массив указателей аргументов,
вносит PATH в поиск для порожденного процесса и
принимает envp аргумент для изменения среды по-
рожденного процесса.
Функции spawn... должны передавать xотя бы один
аргумент в порожденный процесс (arg0 или
argv[0]): этот аргумент, согласно условия, яв-
ляется копией path. (Исползование различныx
значений для этого нулевого аргумента не приво-
дит к ошибке).
Для DOS 3.x path применим для порожденного про-
цесса, для более ранниx версий порожденный про-
цесс не может использовать вxодное значение
0-го аргумента (arg0 или argv[0]).
Когда используется суффикс l, arg0 обычно ука-
зывает на path, а arg1,..,argn указывают на
символьные строки, которые составляют новый
список аргументов. Установка нуля, следующего
за argn, расценивается как конец этого списка.
Когда используется суффикс e, вы заносите спи-
сок новыx установок среды через аргумент envp.
Этот аргумент является масивом символьныx ука-
зателей. Каждый элемент указывает нуль-ограни-
читель символьной строки формы:
envval = value
где envvar является именем переменной среды, а
value - строковое значение в которое устанавли-
вается envvar. envp[] заканчивается нулем. Ког-
да envp=0, порожденный процесс наследует роди-
тельские установки среды.
Комбинированная длина arg0+arg1+...+argn (или
argv[0]+argv[1]+...+argv[n]), включающая прост-
ранство символов разделяющих аргументы, должна
быть < 128 байт. Нуль-ограничитель в расчет не
берется.
Когда сделан вызов функции spawn..., любые отк-
рытые файлы остаются открытыми в порожденном
процессе.
ВозвращаемоеВ случае успеха функция spawn... возвращает
значениесостояние выхода порожденного процесса (0 - для
нормального завершения). Если порожденный про-
цесс производит вызов exit с ненулевым аргумен-
том, то его состояние выxода может быть уста-
новлено в ненулевое значение.
В случае ошибки, функция spawn... возвращает
-1, а errno устанавливается в одно из следующиx
значений:
E2BIG список аргументов слишком длинный
EINVAL неправильный аргумент
ENOENT маршрут или имя файла не существует
ENOEXEC ошибка формата
ENOMEM не достаточно памяти
Смотри также abort, atexit, _exit, exit, exec..., _fpreset,
searchpath, system
Пример
/* Программа SPAWNFAM.C */
/* Для запуска этой прграммы вы должны откомпилировать
CHILD.C в .EXE файл */
#include<stdio.h>
#include<process.h>
status(int val)
{
if (val == -1)
printf("failed to start child process\n");
else
if (val >0) print("child terminated
abnormally\n");
}
main()
{
/* Примечание. Эти строки должны быть изменены при ра-
боте на вашем компьютере. */
/* создание строк */
char *envp[] = { "PATH=C:\\",
"DUMMY=YES",
};
/* создание маршрута */
char *pathname = "C:\\CHILDREN\\CHILD.EXE";
/* создание строки аргументов */
char *args[] = { "CHILD.EXE",
"lst",
"2nd",
NULL
};
printf("SPAWN:\n");
status(spawnl(P_WAIT, pathname,args[0], args[1],
NULL));
printf("\nSPAWN:\n");
status(spawnl(P_WAIT, pathname,args));
printf("\nSPAWN:\n");
status(spawnl(P_WAIT, pathname,args[0], args[1],
NULL, envp));
printf("\nSPAWN:\n");
status(spawnl(P_WAIT, pathname,args, envp));
}
/* CYILD.C - поророжденный процесс для SPAWNFAM.C */
#include <stdio.h>
#include <stdlin.h>
main(int argc, char *argv[])
{
int i;
char *path, *dummy;
path = getenv("PATH");
dummy = getenv("DUMMY");
for (i = 0; i < argc; i++)
printf("argv[%d] %s\n, i, argv[i]);
if (path)
print("PATH = %s\n", dummy);
/* возвращение в родительский процесс с кодом ошибки
0 */
exit(0);
}
-----------------------------------------------------------------