Пример кода порожденного процесса
Пример кода порожденного процесса
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <process.h>
#include <sys/netmgr.h>
#include <sys/neutrino.h>
#include <errno.h>
#include <locale.h>
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("Ребенок: странно, но не удалось создать"
" канал ");
else
printf("Ребенок: канал CChanid = %i создан ", CChanid);
Parpid = atoi(argv[1]);
printf("Ребенок сообщает: он жив благодаря папане"
" Parpid = %i ", Parpid);
strcpy(BufName, "904-3");
if ((nid = netmgr_strtond(BufName, NULL)) == -1)
printf("Ребенок: узел "%s" не найден! ", BufName);
else
printf("Ребенок: узел "%s" найден, его nid = %i ", BufName, nid);
if ((coid =
ConnectAttach(nid, Parpid, atoi(argv[2]), _NTO_SIDE_CHANNEL, 0)) == -1) {
printf("Ребенок: странно, но дитя не смогло"
" установить канал связи с папаней ");
return(-1);
}
printf("Ребенок: установил связь coid = %i с процессом"
" Parpid = %i на узле %i ", coid, Parpid, nid);
// Вот здесь хорошее место, чтобы выполнить все действия,
// необходимые для развертывания данного процесса
itoa(CChanid, SendBuf, 10);
errno = 0;
if (MsgSend(coid, SendBuf, 100, SendBuf, 100) == -1)
printf("Ребенок: на MsgSend() к отцу получил"
" errno = %i ", errno);
else
printf("Ребенок: на MsgSend() получен отклик"
" от родителя."%s" ", SendBuf);
rcvid = MsgReceive(CChanid, RecBuf, 100, NULL);
printf("Ребенок: от папани получено сообщение:"
" "%s" ", RecBuf);
strcpy(RecBuf, "я здесь, папаня!");
if (MsgReply(rcvid, EOK, RecBuf, 100) == -1)
printf("Ребенок: почему-то не удалось ответить"
" папаше. Ау, где ты? ");
printf("Ребенок: дитятко работу закончило ");
ChannelDestroy(CChanid);
ConnectDetach(coid);
return(0);
}
Данный текст является ознакомительным фрагментом.