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
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv) {
int nid; // Дескриптор текущего узла
int CChanid; // Идентификатор созданного канала
int coid; // Идентификатор связи с родителем
// по созданному им каналу
pid_t Parpid; // Идентификатор родительского процесса
int rcvid; // Идентификатор отправителя
// полученного сообщения
char BufName[100];
char SendBuf[100], RecBuf[100];
setlocale(LC_CTYPE, "C-TRADITIONAL");
if ((CChanid = ChannelCreate(0)) == -1)
printf("Ребенок: странно, но не удалось создать"
" канал\n");
else
printf("Ребенок: канал CChanid = %i создан\n", CChanid);
Parpid = atoi(argv[1]);
printf("Ребенок сообщает: он жив благодаря папане"
" Parpid = %i\n", Parpid);
strcpy(BufName, "904-3");
if ((nid = netmgr_strtond(BufName, NULL)) == -1)
printf("Ребенок: узел \"%s\" не найден!\n", BufName);
else
printf("Ребенок: узел \"%s\" найден, его nid = %i\n", BufName, nid);
if ((coid =
ConnectAttach(nid, Parpid, atoi(argv[2]), _NTO_SIDE_CHANNEL, 0)) == -1) {
printf("Ребенок: странно, но дитя не смогло"
" установить канал связи с папаней\n");
return(-1);
}
printf("Ребенок: установил связь coid = %i с процессом"
" Parpid = %i на узле %i\n", coid, Parpid, nid);
// Вот здесь хорошее место, чтобы выполнить все действия,
// необходимые для развертывания данного процесса
itoa(CChanid, SendBuf, 10);
errno = 0;