2 * (c) Oleg Puchinin 2006
3 * graycardinalster@gmail.com
10 "Исполнитель" - система выполнения процессов, с поддержкой "стандартных" действий.
11 "Исполнителю" подается цепочка команд которые применяются как для дочернего так и для
12 родительского процесса.
15 Djob_init (struct __djob_t * ctx)
16 Инициализировать контекст для будущего процесса. Память под контекст должна быть
17 предварительно выделена.
19 dexec_rflags (int flags) / dexec_wflags (int flags)
20 Установить дополнительные флаги для открытия файлов (на чтение / запись). При нулевом
21 аргументе возвращаются текущие флаги.
23 Dexec_op (struct __dexec_t *buf, int count, struct __djob_t *ctx)
24 Выполнить последовательно ряд команд из buf количеством count. Контекст процесса
25 ctx соответственно модифицируется.
27 Dexec (int ops, struct __dexec_t *other_buf, int count, char *cmd, struct __djob_t *ctx)
28 Выполнить при помощи "sh -c" команду cmd, предварительно подготовив процесс. Последовательность
29 команд подготовки процесса может задаваться при помощи флагов ops и непосредственно списка команд
30 other_buf количеством count. Контекст ctx соответственно модифицируется.
34 DEXEC_OFILE / DEXEC_IFILE / DEXEC_EFILE
35 Перенаправить ввод/вывод/ошибки в/из файл(а). Первый аргумент команды - имя файла.
36 Команды не доступны в сокращенной (флаговой) форме.
38 DEXEC_INULL / DEXEC_ONULL / DEXEC_ENULL
39 Заменить ввод/вывод/ошибки на /dev/null
42 Выполнить команду. В данный момент используется ("sh -c"). Может использоваться в конце
43 всех команд или не использоваться вообще. Используется только в Dexec_op, но не Dexec.
45 DEXEC_IPIPE / DEXEC_IPIPE / DEXEC_EPIPE
46 Сделать "трубу" вместо stdin /stdout /stderr. Родительский процесс получает доступ к этим
47 потокам через структуру-описание (см. ниже).
49 DEXEC_OTMP / DEXEC_ETMP
50 Открыть временный файл для потока вывода / ошибок.
52 Структура-описание нового дочернего процесса.
55 __pid_t pid; // идентификационный номер процесса.
56 int exit_status; // Статус завершения.
57 char status_ready; // Процесс завершился.
58 char * user_data; // Пользовательская информация.
59 int stdin; // дескриптор ввода процесса.
60 int stdout; // дескриптор вывода процесса.
61 int stderr; // дескриптор ошибок процесса.
62 int pipe_in[2]; // для внутренних нужд.
65 char * shared_mem; // память, которая разделяется
66 // между родительским и дочерим процессами.
67 int shm_size; // размер разделяемой памяти.
68 char child; // дочерний процесс ?
69 char *otmp_name; // имена временных файлов вывода
70 char *etmp_name; // и ошибок (если были назначены)