Чтение онлайн

на главную - закладки

Жанры

QNX/UNIX: Анатомия параллелизма
Шрифт:

int coid; // Идентификатор связи с порожденным

// процессом по созданному им каналу

int rcvid; // Идентификатор отправителя полученного

// сообщения int

ErrCode; // Код ошибки

char *args[] = {

"/net/904-3/home/ZZZ/BIN/TestChild",

"pid данного процесса",

"идентификатор
канала",

NULL

};

char BufName[100], Bufpid[12],

Bufchanid[12], RecBuffer[100];

char SendBuf[100] = "привет, сынок!";

pid_t procid, childid;

struct inheritance Inhproc;

setlocale(LC_CTYPE, "C-TRADITIONAL");

if ((PChanid = ChannelCreate(0)) == -1)

printf("Родитель: странно, но не удалось "

"создать канал\n");

else printf("Родитель: канал PChanid = %i создан\n", PChanid);

strcpy(BufName, "Bed-Test");

// Передаем порожденному процессу свой pid...

args[1] = itoa(procid = getpid, Bufpid, 10);

// ... и дескриптор канала

args[2] = itoa(PChanid, Bufchanid, 10);

InhProc flags = SPAWN_SETND | SPAWN_NOZOMBIE;

if ((nid = netmgr_strtond(BufName, NULL)) == -1) {

printf("Родитель, отсутствует %s\n", BufName);

return(-1);

} else printf("Родитель: найден узел %s, его nid = %i\n", BufName, nid);

InhProc nd = nid;

sprintf(BufName, "/net/Bed-Test/");

chroot(BufName);

errno = 0;

childid = spawn(args[0], 0, NULL, &InhProc, args, NULL);

ErrCode = errno;

sprintf(BufName, "/net/904-3/");

chroot(BufName);

if (childid- = -1)

printf("Родитель: не удалось породить процесс,"

" errno = %i\n", ErrCode);

else

printf("Родитель, мой id = %i,"

"порожденный
процесс имеет id = %i\n", procid, childid);

if ((rcvid = MsgReceive(PChanid, RecBuffer, 100, NULL)) == -1)

printf("Родитель: от дитятки не удалось"

" получить сообщение\n");

else {

printf("Родитель: от дитятки получено"

" сообщение:\"%s\"\n", RecBuffer);

CChanid = atoi(RecBuffer);

strcpy(RecBuffer, "спасибо, сынок");

if (MsgReply(rcvid, EOK, RecBuffer, 100) == -1)

printf("Родитель: почему-то не удалось "

"ответить сыночку: Ау, где ты?\n");

}

if ((coid =

ConnectAttach(nid, childid, CChanid, _NTO_SIDE_CHANNEL, 0)) == -1) {

printf("Родитель: странно, но не смог установить"

" канал связи с ребенком:"

"nid = %i childid = %i CChanid = %i\n", nid, childid, CChanid);

return(-1);

}

printf("Родитель: установил связь coid = %i с"

" ребенком\n", coid);

errno = 0;

if (MsgSend(coid, SendBuf, 100, SendBuf, 100) == -1)

printf("Родитель: на MsgSend получил errno = %i\n", errno);

else

printf("Родитель, получен отклик на MsgSend"

", \"%s\"\n", SendBuf);

printf("Родитель: позвольте откланяться\n");

ChannelDestroy(Pchanid);

ConnectDetach(CChanid);

return(0);

}

Пример кода порожденного процесса

#include <stdio.h>

#include <unistd.h>

#include <sys/types.h>

#include <string.h>

#include <process.h>

#include <sys/netmgr.h>

#include <sys/neutrino.h>

Поделиться:
Популярные книги

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Отчий дом. Семейная хроника

Чириков Евгений Николаевич
Проза:
классическая проза
5.00
рейтинг книги
Отчий дом. Семейная хроника

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Путанабус. Трилогия

Старицкий Дмитрий
Фантастика:
боевая фантастика
6.93
рейтинг книги
Путанабус. Трилогия

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Потомок бога

Решетов Евгений Валерьевич
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Потомок бога

С Д. Том 16

Клеванский Кирилл Сергеевич
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
С Д. Том 16

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

От Советского Информбюро - 1941-1945 (Сборник)

Неизвестен 3 Автор
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
От Советского Информбюро - 1941-1945 (Сборник)

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Прометей: повелитель стали

Рави Ивар
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Прометей: повелитель стали

Отмороженный 14.0

Гарцевич Евгений Александрович
14. Отмороженный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Отмороженный 14.0