Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Интернет » QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович
<< На главную

QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович

Читать онлайн QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 95 96 97 98 99 100 101 102 103 ... 106
Перейти на страницу:

#include &lt;process.h&gt;

#include &lt;sys/neutrino.h&gt;

#include &lt;sys/netmgr.h&gt;

#include &lt;spawn.h&gt;

#include &lt;errno.h&gt;

#include &lt;unistd.h&gt;

#include &lt;sys/wait.h&gt;

#include &lt;locale.h&gt;

int main(int argc, char **argv) {

 int nid;     // Дескриптор удаленного узла

 int PChanid; // Идентификатор созданного канала

 int CChanid; // Идентификатор канала, созданного

              // порожденным процессом на удаленном узле

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

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

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

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

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

 char *args[] = {

  &quot;/net/904-3/home/ZZZ/BIN/TestChild&quot;,

  &quot;pid данного процесса&quot;,

  &quot;идентификатор канала&quot;,

  NULL

 };

 char BufName[100], Bufpid[12],

  Bufchanid[12], RecBuffer[100];

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

 pid_t procid, childid;

 struct inheritance Inhproc;

 setlocale(LC_CTYPE, &quot;C-TRADITIONAL&quot;);

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

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

   &quot;создать каналn&quot;);

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

 strcpy(BufName, &quot;Bed-Test&quot;);

 // Передаем порожденному процессу свой 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(&quot;Родитель, отсутствует %sn&quot;, BufName);

  return(-1);

 } else printf(&quot;Родитель: найден узел %s, его nid = %in&quot;, BufName, nid);

 InhProc nd = nid;

 sprintf(BufName, &quot;/net/Bed-Test/&quot;);

 chroot(BufName);

 errno = 0;

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

 ErrCode = errno;

 sprintf(BufName, &quot;/net/904-3/&quot;);

 chroot(BufName);

 if (childid- = -1)

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

   &quot; errno = %in&quot;, ErrCode);

 else

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

   &quot;порожденный процесс имеет id = %in&quot;, procid, childid);

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

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

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

 else {

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

   &quot; сообщение:&quot;%s&quot;n&quot;, RecBuffer);

  CChanid = atoi(RecBuffer);

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

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

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

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

 }

 if ((coid =

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

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

   &quot; канал связи с ребенком:&quot;

   &quot;nid = %i childid = %i CChanid = %in&quot;, nid, childid, CChanid);

  return(-1);

 }

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

  &quot; ребенкомn&quot;, coid);

 errno = 0;

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

  printf(&quot;Родитель: на MsgSend получил errno = %in&quot;, errno);

 else

  printf(&quot;Родитель, получен отклик на MsgSend()&quot;

   &quot;, &quot;%s&quot;n&quot;, SendBuf);

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

1 ... 95 96 97 98 99 100 101 102 103 ... 106
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга