Читаем QNX/UNIX: Анатомия параллелизма полностью

 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);

}

<p>Пример кода порожденного процесса</p>

#include

#include

#include

#include

#include

#include

#include

#include

#include

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

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

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

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

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

 pid_t Parpid; // Идентификатор родительского процесса

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных