Сетевое взаимодействие. Возможности утилиты on. Сетевое расширение интерпретатора

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Фрагмент текста работы

Запущенный таким образом процесс использует ресурсы (память и процессор) удаленного узла, но весь ввод/вывод направляется на ту консоль, откуда он был запущен, если не указан параметр "-t", то есть рабочий терминал. Также не стоит забывать, что в случае использования ключа "-n" не изменяется корневой каталог, и все файлы загружаются с файловой системы локального узла, если к файлу не указан полный сетевой путь.

Запуск на удаленном узле применяется обычно для разгрузки процессора или памяти на локальном узле, например, на маломощных машинах с небольшим количеством памяти и слабым процессором. Таким же образом, один компьютер может распределять свои задачи на целой группе машин, образуя своеобразный кластер. Команда on может быть полезна еще и для административных целей: запуска менеджеров ресурсов, демонов, утилит диагностики.

Приведем пример использования утилиты On.

При задании ключа –f, и выполнении команды  «ls /tmp» видим содержимое папки tmp другого компьютера. Имя компьютера, на котором запускались эти команды «SPOcomp4».

$ on -f /net/SPOcomp11 ls /tmp

_sortAAA876586     cdt70260cdt        np2                tr.txt

_sortBAA876586     np1                sset77705.tmp

При задании ключа –n видим содержимое этой же папки, но на своей машине.

$ on -n /net/SPOcomp11 ls /tmp

42

cdt33090cdt

cdt37638cdt

cdt59522cdt

cdt59523cdt

client.c

client_pulsexx91125.tmp

data.txt

globalhist.html

gmon.out

intepolation_client_groot1239627385380

interpolation_client_IDE_groot1239626551994

interpolation_server_gxx30142.tmp

scr1.jpg

server.c

set1.bmp

Другой пример показывает аналогичную ситуацию, запуск производится с другого компьютера, SPOcomp11.

Ключ –n: видим процессы этого компьютера SPOcomp11.

$ on -n SPOcomp4 ps -A

PID TTY          TIME CMD

1 ?        00:32:39

2 ?        00:00:00 /sbin/tinit

4099 ?        00:00:00 pci-bios

4100 ?        00:00:00 slogger

4101 ?        00:00:03 io-usb

4102 ?        00:00:01 io-hid

4103 ?        00:00:00 devc-con-hid

8200 ?        00:00:06 devb-eide

8201 ?        00:00:00 umass-enum

16394 ?        00:00:00 pipe

20491 ?        00:00:00 mqueue

258060 ?        00:00:00 fontsleuth

110605 ?        00:00:00 devb-fdc

77838 ?        00:00:00 devc-ser8250

131087 ?        00:00:01 devc-pty

77840 ?        00:00:00 devc-par

319505 ?        00:00:00 login

77842 ?        00:00:09 io-net

135187 ?        00:00:00 random

94228 ?        00:00:00 spooler

147477 ?        00:00:00 dumper

163862 ?        00:00:00 login

163863 ?        00:00:00 login

163864 ?        00:00:00 login

540697 ?        00:00:00 pfm

409626 ?        00:00:00 pwm

208923 ?        00:00:03 Photon

237596 ?        00:00:02 phfont

540701 ?        00:00:00 pterm

286750 ?        00:00:41 io-graphics

307231 ?        00:00:00 /usr/photon/bin/devi-hid

454688 ?        00:00:00 shelf

491553 ?        00:00:01 bkgdmgr

491554 ?        00:00:00 wmswitch

491555 ?        00:00:00 saver

540708 ?        00:00:00 /bin/sh

712741 ?        00:00:00 devb-umass

589862 ?        00:00:00 pfm

630823 ?        00:00:00 pfm

634920 ?        00:00:00 ped

639017 ?        00:00:00 helpviewer

639018 ?        00:00:00 vserver.file

725035 ?        00:00:00 pfm

749612 ?        00:00:00 ped

753709 ?        00:00:00 ped

757806 ?        00:00:00 pterm

757807 ?        00:00:00 /bin/sh

815152 ?        00:00:00 snapshot

815153 ?        00:00:00 pv

847922 ?        00:00:00 helpviewer

847923 ?        00:00:01 helpviewer

847924 ?        00:00:00 pfm

856117 ?        00:00:00 pterm

856118 ?        00:00:00 /bin/sh

921655 ?        00:00:00 pfm

938040 ?        00:00:00 pfm

999481 ?        00:00:08 pterm

999482 ?        00:00:00 /bin/sh

999483 ?        00:00:01 find

1126460 ?        00:00:00 on

Ключ –f: видим процессы компьютера SPOcomp4.

$ on -f SPOcomp4 ps -A

PID TTY          TIME CMD

1 ?        00:41:07

2 ?        00:00:00 /sbin/tinit

4099 ?        00:00:00 pci-bios

4100 ?        00:00:00 slogger

4101 ?        00:00:02 io-usb

4102 ?        00:00:01 io-hid

4103 ?        00:00:00 devc-con-hid

8200 ?        00:00:02 devb-eide

245769 ?        00:00:01 phfont

8202 ?        00:00:00 devb-umass

16395 ?        00:00:00 pipe

20492 ?        00:00:00 mqueue

266253 ?        00:00:00 fontsleuth

110606 ?        00:00:00 devb-fdc

77839 ?        00:00:00 devc-ser8250

131088 ?        00:00:00 devc-pty

77841 ?        00:00:00 devc-par

327698 ?        00:00:00 login

77843 ?        00:00:07 io-net

135188 ?        00:00:00 random

94229 ?        00:00:00 spooler

147478 ?        00:00:00 dumper

151575 ?        00:00:00 qconn

167960 ?        00:00:00 login

167961 ?        00:00:00 login

167962 ?        00:00:00 login

544795 ?        00:00:00 phlip

417820 ?        00:00:00 pwm

213021 ?        00:00:01 Photon

925726 ?        00:00:00 helpviewer

294943 ?        00:00:37 io-graphics

315424 ?        00:00:00 /usr/photon/bin/devi-hid

462881 ?        00:00:00 shelf

499746 ?        00:00:00 bkgdmgr

499747 ?        00:00:00 wmswitch

499748 ?        00:00:00 saver

614437 ?        00:00:00 pfm

614438 ?        00:00:00 pfm

729127 ?        00:00:00 pfm

729128 ?        00:00:00 pterm

729129 ?        00:00:00 /bin/sh

925738 ?        00:00:00 vserver.file

827436 ?        00:00:00 pv

1126445 ?        00:00:00 ps

Как видно, утилита on в ряде случаев действительно полезна. Часть ее функций просто незаменима в крупных, распределенных по сети проектах, однако применять ее в "чистом" виде, т.е. вызывая с помощью system() весьма неудобно и непрактично. Давайте рассмотрим программные реализации некоторых полезных свойств этой утилиты.

Рассмотрим клиент-серверное приложение для обмена по сети. Для того чтобы получить дескриптор узла, зная его имя, используется функция netmgr_strtond(), описанная в заголовочном файле <sys/netmgr.h>. Дескриптор узла однозначно определяет сетевой узел, но только для текущего (локального) узла и текущего процесса. Дескриптор узла необходимо получать каждый раз при установке соединения.

Server.c – запуск с компьютера SPOcomp4

#include <sys/neutrino.h>

#include <sys/netmgr.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <errno.h>

int main(void)

{

int rcvid;

int chid, pid;

char message[200];

pid=getpid(0);

chid=ChannelCreate(0);

printf("SERVER: Channel id= %i PID=%i \n", chid,pid);

while(1)

{

rcvid=MsgReceive(chid, message, sizeof(message), NULL);

if(rcvid>0)

{

printf("SERVER: We receive message \n");

printf("SERVER: MESSAGE: \"%s\". \n", message);

strcpy(message, "Hello, I am server");

if (MsgReply(rcvid,EOK, message, 200)==-1)

{

printf("SERVER: Reply Error. \n");

}

}

}

return 0;

}

Client.c - запуск с компьютера SPOcomp11

#include <sys/neutrino.h>

#include <sys/netmgr.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <errno.h>

int main(void){

int nd;

char *smsg = "Hello, I am 1st client";

char rmsg[200];

int coid;

int chid, pids;

printf("Enter channel id and pid \n");

scanf("%d %d", &chid, &pids);

nd=netmgr_strtond("SPOcomp4", NULL);

printf("%i", nd);

coid=ConnectAttach(nd,pids,chid,0,0);

if(coid==-1)

{

printf("Error Connect attach %i %i \n", pids, chid);

perror(NULL);

exit(EXIT_FAILURE);

}

printf("CLIENT: Sending! \n");

if(MsgSend(coid, smsg, strlen(smsg)+1, rmsg, sizeof(rmsg))==-1)

{

fprintf(stderr, "Error msgSend \n");

perror(NULL);

exit(EXIT_FAILURE);

}

if(strlen(rmsg)>0)

{

printf("CLIENT: This what server Reply to me: \n  %s \n", rmsg);

}

ConnectDetach(coid);

return 0;

}

На рисунках – иллюстрация работы программы.

Терминал SPOcomp4

Терминал SPOcomp11

Проиллюстрируем работу утилиты pidinc ключом –n.

Pidin -n node   The name of the remote node from which to get the information.

То есть при запуске этой утилиты с указанием имени удалённого компьютера, мы получаем информацию о процессах, запущенных на нём.

Пример:

Получение информации о процессах на удалённом компьютере:

$ pidin -n SPOcomp4

pid tid name               prio STATE       Blocked

1   1 procnto              0f READY

1   2 procnto             10r RUNNING

1   3 procnto             10r RECEIVE     1

1   4 procnto             10r RECEIVE     1

1   5 procnto             21r RECEIVE     1

1   6 procnto             10r RECEIVE     1

1   7 procnto             21r RECEIVE     1

1   8 procnto             10r RECEIVE     1

1   9 procnto             10r RECEIVE     1

1  10 procnto             10r RECEIVE     1

1  11 procnto             10r RECEIVE     1

2   1 sbin/tinit          10o REPLY       1

4099   1 proc/boot/pci-bios  21o RECEIVE     1

4100   1 proc/boot/slogger   21o RECEIVE     1

4101   1 proc/boot/io-usb    10o SIGWAITINFO

4101   2 proc/boot/io-usb    21r RECEIVE     4

4101   3 proc/boot/io-usb    21r RECEIVE     7

4101   4 proc/boot/io-usb    21r RECEIVE     10

4101   5 proc/boot/io-usb    21r RECEIVE     13

4101   6 proc/boot/io-usb    21r RECEIVE     16

4101   7 proc/boot/io-usb    21r RECEIVE     1

4101   8 proc/boot/io-usb    21o RECEIVE     19

4101   9 proc/boot/io-usb    10r NANOSLEEP

4101  11 proc/boot/io-usb    21o RECEIVE     19

4102   1 proc/boot/io-hid    10o SIGWAITINFO

4102   2 proc/boot/io-hid    10o RECEIVE     4

4102   3 proc/boot/io-hid    10o RECEIVE     4

4102   4 proc/boot/io-hid    10r REPLY       4101

4102   5 proc/boot/io-hid    15r RECEIVE     12

4102   6 proc/boot/io-hid    15r RECEIVE     16

4103   1 /boot/devc-con-hid  10o RECEIVE     1

4103   2 /boot/devc-con-hid  10o REPLY       4102

8200   1 roc/boot/devb-eide  10o SIGWAITINFO

8200   2 roc/boot/devb-eide  21r RECEIVE     1

8200   3 roc/boot/devb-eide  21r RECEIVE     4

8200   4 roc/boot/devb-eide  10o RECEIVE     10

8200   6 roc/boot/devb-eide  12o RECEIVE     7

8200   7 roc/boot/devb-eide  10o RECEIVE     7

8200   8 roc/boot/devb-eide  10o RECEIVE     7

8200  11 roc/boot/devb-eide  10o RECEIVE     7

8200  12 roc/boot/devb-eide  10o RECEIVE     7

8202   1 oc/boot/devb-umass  10r SIGWAITINFO

8202   2 oc/boot/devb-umass  21r REPLY       4101

8202   4 oc/boot/devb-umass  10r RECEIVE     7

8202   5 oc/boot/devb-umass  21r RECEIVE     4

8202   6 oc/boot/devb-umass  10r RECEIVE     4

8202   7 oc/boot/devb-umass  10r RECEIVE     4

16395   1 sbin/pipe           10o SIGWAITINFO

16395   2 sbin/pipe           10o RECEIVE     1

16395   3 sbin/pipe           10o RECEIVE     1

16395   4 sbin/pipe           10o RECEIVE     1

16395   5 sbin/pipe           10o RECEIVE     1

20492   1 sbin/mqueue         10o RECEIVE     1

77839   1 sbin/devc-ser8250   21o RECEIVE     1

77841   1 sbin/devc-par       10o RECEIVE     1

77841   2 sbin/devc-par        9r CONDVAR     8053e00

77843   1 sbin/io-net         10o SIGWAITINFO

77843   2 sbin/io-net         20o RECEIVE     5

77843   3 sbin/io-net         10o RECEIVE     1

77843   4 sbin/io-net         10o RECEIVE     1

77843   5 sbin/io-net         10o RECEIVE     1

77843   6 sbin/io-net         21r RECEIVE     19

77843   7 sbin/io-net         10o RECEIVE     25

77843   8 sbin/io-net         10o RECEIVE     28

77843   9 sbin/io-net         10o RECEIVE     1

94229   1 usr/sbin/spooler    10o NANOSLEEP

110606   1 sbin/devb-fdc       10o SIGWAITINFO

110606   2 sbin/devb-fdc       21r RECEIVE     1

94229   1 usr/sbin/spooler    10o NANOSLEEP

110606   1 sbin/devb-fdc       10o SIGWAITINFO

110606   2 sbin/devb-fdc       21r RECEIVE     1

110606   3 sbin/devb-fdc       10o RECEIVE     7

110606   4 sbin/devb-fdc       10o RECEIVE     4

110606   5 sbin/devb-fdc       10o RECEIVE     4

110606   6 sbin/devb-fdc       10o RECEIVE     4

131088   1 sbin/devc-pty       10o RECEIVE     1

135188   1 usr/sbin/random     10o SIGWAITINFO

135188   2 usr/sbin/random     21o RECEIVE     1

135188   3 usr/sbin/random     10o NANOSLEEP

147478   1 usr/sbin/dumper     21o RECEIVE     1

151575   1 usr/sbin/qconn      10o SIGWAITINFO

151575   2 usr/sbin/qconn      10o CONDVAR     8062da0

151575   3 usr/sbin/qconn      21o RECEIVE     1

151575   4 usr/sbin/qconn      21o RECEIVE     3

167960   1 bin/login           10o REPLY       4103

167961   1 bin/login           10o REPLY       4103

167962   1 bin/login           10o REPLY       4103

213021   1 /photon/bin/Photon  10r RECEIVE     1

245769   1 /photon/bin/phfont  10o JOIN        2

245769   2 /photon/bin/phfont  10o RECEIVE     1

266253   1 ton/bin/fontsleuth  10o RECEIVE     1

266253   2 ton/bin/fontsleuth  10o SIGWAITINFO

266253   3 ton/bin/fontsleuth   6o RECEIVE     1

266253   4 ton/bin/fontsleuth  10o RECEIVE     1

294943   1 on/bin/io-graphics  21r RECEIVE     1

294943   2 on/bin/io-graphics  12r REPLY       266253

294943   3 on/bin/io-graphics  12r REPLY       213021

315424   1 hoton/bin/devi-hid  10o DEAD

315424   2 hoton/bin/devi-hid  10o REPLY       4102

315424   3 hoton/bin/devi-hid  12o SIGWAITINFO

327698   1 bin/login           10o REPLY       4103

417820   1 usr/photon/bin/pwm  10r RECEIVE     1

462881   1 r/photon/bin/shelf  10r RECEIVE     1

462881   2 r/photon/bin/shelf  10r CONDVAR     8075ccc

499746   1 photon/bin/bkgdmgr  10r RECEIVE     1

499747   1 hoton/bin/wmswitch  10r RECEIVE     2

499748   1 r/photon/bin/saver  10r RECEIVE     1

544795   1 r/photon/bin/phlip  10r RECEIVE     1

614437   1 usr/photon/bin/pfm  10r RECEIVE     1

614438   1 usr/photon/bin/pfm  10r RECEIVE     2

729127   1 usr/photon/bin/pfm  10r RECEIVE     2

729128   1 r/photon/bin/pterm  10r RECEIVE     1

729129   1 bin/sh              10r REPLY       131088

827436   1 usr/photon/bin/pv   10r RECEIVE     1

925726   1 ton/bin/helpviewer  10r RECEIVE     1

925738   1 n/bin/vserver.file  10r RECEIVE     1

1065003     (Zombie)

1130541   1 photon/bin/voyager  10r RECEIVE     1

1130542   1 bin/sh              10r SIGSUSPEND

1155119   1 /mozilla/mozserver  10r RECEIVE     1

1155119   2 /mozilla/mozserver  10r SIGWAITINFO

1155119   3 /mozilla/mozserver  10r CONDVAR     80b3908

1155119   4 /mozilla/mozserver  10r CONDVAR     80f0960

1155119   5 /mozilla/mozserver  10r CONDVAR     82c7598

1155119   7 /mozilla/mozserver  10r CONDVAR     82c7598

1155119   8 /mozilla/mozserver  10r CONDVAR     82c7598

Получение информации о процессах на локальном компьютере, аналогично pidin без ключей:

$ pidin -n SPOcomp11

pid tid name               prio STATE       Blocked

1   1 procnto              0f READY

1   2 procnto             10r RECEIVE     1

1   3 procnto             21r RECEIVE     1

1   4 procnto             10r RECEIVE     1

1   5 procnto             21r RECEIVE     1

1   6 procnto             11r RECEIVE     1

1   7 procnto             10r RECEIVE     1

1   8 procnto             10r RECEIVE     1

1   9 procnto             10r RUNNING

2   1 sbin/tinit          10o REPLY       1

4099   1 proc/boot/pci-bios  10o RECEIVE     1

4100   1 proc/boot/slogger   10o RECEIVE     1

4101   1 proc/boot/io-usb    10o SIGWAITINFO

4101   2 proc/boot/io-usb    21r RECEIVE     4

4101   3 proc/boot/io-usb    21r RECEIVE     7

4101   4 proc/boot/io-usb    21r RECEIVE     1

4101   6 proc/boot/io-usb    10r NANOSLEEP

4101   7 proc/boot/io-usb    21o RECEIVE     10

4101   8 proc/boot/io-usb    10o RECEIVE     10

4102   1 proc/boot/io-hid    10o SIGWAITINFO

4102   2 proc/boot/io-hid    10o RECEIVE     4

4102   3 proc/boot/io-hid    10o RECEIVE     4

4102   4 proc/boot/io-hid    10r REPLY       4101

4102   5 proc/boot/io-hid    15r RECEIVE     12

4102   6 proc/boot/io-hid    15r RECEIVE     16

4103   1 /boot/devc-con-hid  10o RECEIVE     1

4103   2 /boot/devc-con-hid  10o REPLY       4102

8200   1 roc/boot/devb-eide  10o SIGWAITINFO

8200   2 roc/boot/devb-eide  21r RECEIVE     1

8200   3 roc/boot/devb-eide  21r RECEIVE     4

8200   4 roc/boot/devb-eide  10o RECEIVE     10

8200   5 roc/boot/devb-eide  10o RECEIVE     7

8200   6 roc/boot/devb-eide  10o RECEIVE     7

8200   7 roc/boot/devb-eide  10o RECEIVE     7

8200   8 roc/boot/devb-eide  10o RECEIVE     7

8200  11 roc/boot/devb-eide  10o RECEIVE     7

8201   1 oc/boot/umass-enum  10o SIGWAITINFO

8201   2 oc/boot/umass-enum  10r REPLY       4101

16394   1 sbin/pipe           10o SIGWAITINFO

16394   2 sbin/pipe           10o RECEIVE     1

16394   3 sbin/pipe           10o RECEIVE     1

16394   4 sbin/pipe           10o RECEIVE     1

20491   1 sbin/mqueue         10o RECEIVE     1

77838   1 sbin/devc-ser8250   10o RECEIVE     1

77840   1 sbin/devc-par       10o RECEIVE     1

77840   2 sbin/devc-par        9r CONDVAR     8053e00

77842   1 sbin/io-net         10o SIGWAITINFO

77842   2 sbin/io-net         20o RECEIVE     5

77842   3 sbin/io-net         10o RECEIVE     1

77842   4 sbin/io-net         10o RECEIVE     1

77842   5 sbin/io-net         10o RECEIVE     1

77842   6 sbin/io-net         21r RECEIVE     19

77842   7 sbin/io-net         21o RECEIVE     25

77842   8 sbin/io-net         20o RECEIVE     28

94228   1 usr/sbin/spooler    10o NANOSLEEP

110605   1 sbin/devb-fdc       10o SIGWAITINFO

110605   2 sbin/devb-fdc       21r RECEIVE     1

110605   3 sbin/devb-fdc       10o RECEIVE     7

110605   4 sbin/devb-fdc       10o RECEIVE     4

110605   5 sbin/devb-fdc       10o RECEIVE     4

110605   6 sbin/devb-fdc       10o RECEIVE     4

131087   1 sbin/devc-pty       10o RECEIVE     1

135187   1 usr/sbin/random     10o SIGWAITINFO

135187   2 usr/sbin/random     10o RECEIVE     1

135187   3 usr/sbin/random     10o NANOSLEEP

147477   1 usr/sbin/dumper     10o RECEIVE     1

163862   1 bin/login           10o REPLY       4103

163863   1 bin/login           10o REPLY       4103

163864   1 bin/login           10o REPLY       4103

208923   1 /photon/bin/Photon  12r RECEIVE     1

237596   1 /photon/bin/phfont  10o JOIN        2

237596   2 /photon/bin/phfont  10o RECEIVE     1

258060   1 ton/bin/fontsleuth  10o RECEIVE     1

258060   2 ton/bin/fontsleuth  10o SIGWAITINFO

258060   3 ton/bin/fontsleuth   6o RECEIVE     1

258060   4 ton/bin/fontsleuth  10o RECEIVE     1

286750   1 on/bin/io-graphics  10r RECEIVE     1

286750   2 on/bin/io-graphics  12r REPLY       258060

286750   3 on/bin/io-graphics  12r REPLY       208923

307231   1 hoton/bin/devi-hid  10o DEAD

307231   2 hoton/bin/devi-hid  10o REPLY       4102

307231   3 hoton/bin/devi-hid  12o SIGWAITINFO

319505   1 bin/login           10o REPLY       4103

409626   1 usr/photon/bin/pwm  10r RECEIVE     1

454688   1 r/photon/bin/shelf  10r CONDVAR     8075ccc

454688   2 r/photon/bin/shelf  10r RECEIVE     1

491553   1 photon/bin/bkgdmgr  10r RECEIVE     1

491554   1 hoton/bin/wmswitch  10r RECEIVE     2

491555   1 r/photon/bin/saver  10r RECEIVE     1

540697   1 usr/photon/bin/pfm  10r RECEIVE     1

540701   1 r/photon/bin/pterm  10r RECEIVE     1

540708   1 bin/sh              10r REPLY       131087

589862   1 usr/photon/bin/pfm  10r REPLY       208923

634920   1 usr/photon/bin/ped  10r REPLY       208923

639017   1 ton/bin/helpviewer  10r RECEIVE     1

639018   1 n/bin/vserver.file  10r RECEIVE     1

712741   1 oc/boot/devb-umass  10r SIGWAITINFO

712741   2 oc/boot/devb-umass  21r REPLY       4101

712741   3 oc/boot/devb-umass  21r RECEIVE     1

712741   4 oc/boot/devb-umass  10r RECEIVE     7

712741   5 oc/boot/devb-umass  10r RECEIVE     4

712741   6 oc/boot/devb-umass  10r RECEIVE     4

712741   7 oc/boot/devb-umass  10r RECEIVE     4

712741   8 oc/boot/devb-umass  10r RECEIVE     4

725035   1 usr/photon/bin/pfm  10r REPLY       208923

749612   1 usr/photon/bin/ped  10r REPLY       208923

753709   1 usr/photon/bin/ped  10r REPLY       208923

757806   1 r/photon/bin/pterm  10r RECEIVE     1

757807   1 bin/sh              10r SIGSUSPEND

847922   1 ton/bin/helpviewer  10r RECEIVE     1

847923   1 ton/bin/helpviewer  10r RECEIVE     1

856117   1 r/photon/bin/pterm  10r RECEIVE     1

856118   1 bin/sh              10r REPLY       131087

999481   1 r/photon/bin/pterm  10r RECEIVE     1

999482   1 bin/sh              10r REPLY       131087

1212455   1 bin/pidin           10r REPLY       1

Использование GNS.

Для того, чтобы созданный канал с помощью name_attach можно было использовать для обмена сообщениями в сети, нужно при вызове функции указать флаг NAME_FLAG_ATTACH_GLOBAL.  При таком флаге, канал будет создан не в папке /dev/name/local/ , а в папке /dev/name/global. Для подключения к этому каналу используется функция name_open, также с флагом NAME_FLAG_ATTACH_GLOBAL . Для того, чтобы клиент с удалённой машины мог видеть папку global сервера, нужно  Включить сервис глобальных имён – gns.

Для сервера:              gns –s

Для клиента:             gns –c

Server.c

#include <errno.h>

#include <process.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/dispatch.h>

#include <sys/neutrino.h>

int main (int argc, char *argv[])

{

name_attach_t     *channel;  

int   rcvid;

char  receive_buf[50], reply_buf[50];

channel = name_attach(NULL, argv[1], NAME_FLAG_ATTACH_GLOBAL);

while (1) {

rcvid = MsgReceive(channel->chid, &receive_buf, sizeof(receive_buf), NULL);

// Если не импульс, обрабатываем сообщение

if (rcvid) {

if (strlen(receive_buf)) {

printf("Server: message from client \"%s\"\n", &receive_buf );

strcpy(reply_buf, "Hello from server");

printf("Server: send message \"%s\"\n", &reply_buf );

}

else {

strcpy(reply_buf, "ok");

}                

MsgReply(rcvid, EOK, &reply_buf, sizeof(reply_buf));

}

}

name_detach(channel, 0);

return EXIT_SUCCESS;

}

Client.c

#include <sys/dispatch.h>

#include <sys/neutrino.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <errno.h>

int main (int argc, char* argv

[]) {

int   coid, pid = getpid();

// Возвращаемое значение MsgSend

int status;

char  send_buf[50], reply_buf[50];

// Открытие канала. Для этого нужно знать только имя префикса и его тип (0 - локальный)

coid = name_open(argv[1], NAME_FLAG_ATTACH_GLOBAL);

sprintf(send_buf, "Hello from client with PID = %d", pid);

printf("Client: send message \"%s\"\n", &send_buf);

status = MsgSend(coid,  &send_buf, sizeof(send_buf), &reply_buf, sizeof(reply_buf));

if (status == -1) {

printf("Error of MsgSend\n");

return EXIT_FAILURE;

}

printf("Client: message \"%s\" from server\n", &reply_buf);

name_close(coid);

return EXIT_SUCCESS;

}

Иллюстрация работы программы

Сервер. SPOcomp10

Клиент. SPOcomp11

Пока не запущен gns, не будет создана папка global:

# ls /dev/name

ls: No such file or directory (/dev/name)

После того, как мы запустим gns, в папке /dev/name появится папка global

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.