#include <errno.h>
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/iofunc.h>
#include <sys/dispatch.h>
#include <devctl.h>
#include <locale.h>
#include "/home/ZZZ/TESTS/MR/MessTest.h"
int PrivatHandler(message_context_t *ctp, int code,
unsigned flags, void* handle);
char* IdLabelParse(int id);
// Π’Π°Π±Π»ΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ²ΡΠ·ΠΈ
static resmgr_connect_funcs_t connect_funcs;
// Π’Π°Π±Π»ΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°
static resmgr_io_funcs_t io_funcs;
// Π‘ΡΡΡΠΊΡΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΡΡΠΎΠΉΡΡΠ²Π°
static iofunc_attr_t attr;
main(int args, char **argv) {
resmgr_attr_t resmgr_attr; // Π‘ΡΡΡΠΊΡΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ²
dispatch_t *dpp; // Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ,
// ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ°Π½Π°Π»Π°.
dispatch_context_t *ctp; // ΠΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°; ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±ΡΡΠ΅Ρ
// ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π±ΡΡΠ΅Ρ Π²Π΅ΠΊΡΠΎΡΠΎΠ² Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°
int id;
int result;
char BufferRec[100];
int rcvid;
setlocale(LC_CTYPE, "C-TRADITIONAL");
/* ΠΠ΄Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° */
/* Π‘ΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ... */
/* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ */
if ((dpp = dispatch_create()) == NULL) {
printf("%s: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ"
" Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ.\n", argv[0]);
return EXIT_FAILURE;
}
/* Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ dpp ΡΠΎΠ·Π΄Π°Π½Π° ΡΡΡΡΠΊΡΡΡΠ° Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ */
/* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ² */
memset(&resmgr_attr, 0, sizeof resmgr_attr);
resmgr_attr.nparts_max = 1;
resmgr_attr.msg_max_size = MESSIZE_MAX;
/* ΠΠ°Π΄Π°Π΅ΠΌ ΡΠΈΡΠ»ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΡΡΡΠΊΡΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ² Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° (IOV) = 1.
ΠΠ°Π΄Π°Π΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π²Π½ΡΠΌ MESSIZE_MAX.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ² */
/* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ */
iofunc_func_init(_RESMGR_CONNECT_NFUNCS, &connect_funcs,
_RESMGR_IO_NFUNCS, &io_funcs);
/* Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π²Π΅ ΡΠ°Π±Π»ΠΈΡΡ (ΡΡΡΡΠΊΡΡΡΡ), Π·Π°Π΄Π°ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ Π΄Π²ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:
ΡΠ°Π±Π»ΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ²ΡΠ·ΠΈ ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°.
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ
iofunc_*_default() ... Π‘Π²ΠΎΠΈΠΌΠΈ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌ - Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. */
/* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ ΡΡΡΡΠΊΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² */
iofunc_attr_init(&attr, S_IFNAM | 0666, 0, 0);
attr.nbytes = MESSIZE_MAX + 1;
/* Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ²,
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ;
S_IFNAM ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠΈΠΏ ΡΡΡΡΠΎΠΉΡΡΠ²Π° - Special named file,
ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΡΠ΅ ΡΠ»Π°Π³ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°,
ΡΠΈΡΠ»ΠΎ Π±Π°ΠΉΡ Π² ΡΠ΅ΡΡΡΡΠ΅ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡ Π±ΡΡΠ΅ΡΠ°. */
/* ΠΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° */
if ((id = resmgr_attach(dpp, &resmgr_attr, "/dev/MESSTEST/RM", _FTYPE_ANY,
0, &connect_funcs, &io_funcs, &attr)) == -1) {
printf("%s: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΡΡ ΠΈΠΌΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°"
" ΡΠ΅ΡΡΡΡΠΎΠ².\n", argv[0]);
return EXIT_FAILURE;
}
/* ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅: ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ·Π»Π΅ ΠΈΠΌΡ /dev/MESSTEST/RM
dpp ΠΈ resmgr_attr - ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ;
/dev/MESSTEST/RM - Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΈΠΌΡ,
_FTYPE_ANY - ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅
Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ Π·Π°ΠΏΡΠΎΡΠ° ΠΎΡΠΊΡΡΡΠΈΡ); ΡΠ°Π²Π½ΡΠΉ Π½ΡΠ»Ρ ΡΠ»Π°Π³
ΡΠ°Π·Π±ΠΎΡΠΊΠΈ ΠΏΡΡΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ Π·Π°ΠΏΡΠΎΡ -
ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ /dev/MESSTEST/RM,
&connect_funcs - Π·Π°Π΄Π°Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ²ΡΠ·ΠΈ;
&io_funcs - Π·Π°Π΄Π°Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°;
attr - ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π²ΡΡΠ΅ ΡΡΡΡΠΊΡΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ
ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅, Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ -
PrivatHandler() */
if (message_attach(dpp, NULL, 0x5000, 0x5fff, &PrivatHandler, NULL) == -1) {
printf("Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠΉ "
"Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ\n");
return(EXIT_FAILURE);
}
/* Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ */
ctp = dispatch_context_alloc(dpp);
/* Π Π°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎΡΡ Π° ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅, ΡΠ°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ
ΡΠΈΡΠ»ΠΎ Π²Π΅ΠΊΡΠΎΡΠΎΠ² Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅,
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ² */
/* ΠΠ°ΠΏΡΡΠΊ ΠΏΠ΅ΡΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ² */
while(1) {
// ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
if ((ctp = dispatch_block(ctp)) == NULL) {
printf("ΠΎΡΠΈΠ±ΠΊΠ° Π±Π»ΠΎΠΊΠ°\n");
return EXIT_FAILURE;
}
printf("ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅"
" Π΄Π»ΠΈΠ½ΠΎΠΉ %i Π±Π°ΠΉΡ\n", ctp->resmgr_context.info.msglen);
result = dispatch_handler(ctp);
// ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ, ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ²ΡΠ·ΠΈ
// ΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
if (result)
printf("ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π΅ ΡΠΌΠΎΠ³ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ"
" ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ result = %i\n", result);
}
}
/********************************************************************
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠΎ Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΊΠΎΡΠΎΡΡΡ
ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ message_attach()
********************************************************************/
int PrivatHandler(message_context_t* ctp, int code,
unsigned flags, void* handle) {
char Buffer[MESSIZE_MAX];
printf("ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏ %x ΠΎΡ"
" \"%s\"\n", code, IdLabelParse(code));
printf("ΠΠΎΡ ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ <<%s>>\n",
(char *)(ctp->msg) + 4);
strcpy(Buffer, "ΠΠ»ΠΈΠ΅Π½ΡΡ: Π΄Π°, Ρ ΡΠ°ΠΊΠΎΠΉ");
MsgReply(ctp->rcvid, EOK, Buffer, sizeof(Buffer));
return(0);
}
/********************************************************************
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ°Ρ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΎΠ΅
ΠΈΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠ΅
********************************************************************/
char* IdLabelParse(int id) {
struct IdLabel_t Inventory;
int i = 0;
while (IdLabel[i].id != id && i < ALLNUM_MYPROC) i++;
if (i == ALLNUM_MYPROC) return Anonymous;
else return(IdLabel[i].name);
}
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ»ΡΠΆΠ±Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ QNX Π²Π΅ΡΡΠΈΠΈ 6.3 ΡΠ΅ΡΠ²ΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΠΌΡΠΉ GNS-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ ΡΠ»ΡΠΆΠ±Ρ (ΡΡΠΈΠ»ΠΈΡΠΎΠΉ gns), Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π² ΡΠ΅ΡΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ, Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠ²ΠΎΡ ΡΠ»ΡΠΆΠ±Ρ, Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΎΡΡΡΠΊΠΈΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»ΡΠΆΠ±Ρ ΡΠ΅ΡΠ΅Π· QNET-ΡΠ΅ΡΡ Π±Π΅Π· Π·Π½Π°Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΡΠ°ΡΡΠ½ΠΎΡΡΠ΅ΠΉ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΄Π΅ ΡΡΠ° ΡΠ»ΡΠΆΠ±Π° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΠΈ ΠΊΡΠΎ Π΅Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ ΡΠΌ. Π² [4].
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ»ΡΠΆΠ±Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ Π½Π° ΡΠΎΠΌ ΡΠ·Π»Π΅, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ. Π ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° GNS-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π² ΡΠΎΠ»ΠΈ Π½Π΅ΠΊΠΎΠΉ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Ρ ΡΠ°Π½ΡΡΠ΅ΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ, ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΏΠΎΠΈΡΠΊ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ Ρ Π½ΠΈΠΌΠΈ. ΠΠ° ΡΠ·Π»Π΅ ΠΆΠ΅, Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ (ΡΠΎ Π΅ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ Π½Π° ΡΡΠΎΠΌ ΠΆΠ΅ ΡΠ·Π»Π΅) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ-ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ (ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ) gns.
Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΡΠ·Π΅Π»:
# gns -s
ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΡΠ·Π΅Π» (ΡΠ·Π»Ρ):
# gns -Ρ
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π° ΡΠ·Π»Π°Ρ , Π³Π΄Π΅ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΡΠ»ΡΠΆΠ±Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΠ²ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° /dev/name/global ΠΈ /dev/name/local. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π», Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠ΅Π½ gns-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ, Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅ΡΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π²ΠΈΠ΄ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π½Π° /dev/name/global. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ /dev/name/local, ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠ΅Π΅ΡΡ ΠΎΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅. (ΠΡΡΠ°ΡΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΈΠΌΠ΅Π½ global ΠΈ local ΠΏΠΎΠ΄ /dev/name/ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π΅ΡΠ΅ ΠΈΠΌΡ gns_server ΠΈΠ»ΠΈ gns_local β ΠΈΠΌΡ, ΠΏΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΌ GNS-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ.)