Β 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ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ»ΡΠΆΠ±Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ Π½Π° ΡΠΎΠΌ ΡΠ·Π»Π΅, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ. Π ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° GNS-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π² ΡΠΎΠ»ΠΈ Π½Π΅ΠΊΠΎΠΉ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Ρ ΡΠ°Π½ΡΡΠ΅ΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ, ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΏΠΎΠΈΡΠΊ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ Ρ Π½ΠΈΠΌΠΈ. ΠΠ° ΡΠ·Π»Π΅ ΠΆΠ΅, Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ (ΡΠΎ Π΅ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ Π½Π° ΡΡΠΎΠΌ ΠΆΠ΅ ΡΠ·Π»Π΅) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ-ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ (ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ)
gnsΠ‘Π΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΡΠ·Π΅Π»:
# gns -sΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΡΠ·Π΅Π» (ΡΠ·Π»Ρ):
# gns -ΡΠ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π° ΡΠ·Π»Π°Ρ , Π³Π΄Π΅ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΡΠ»ΡΠΆΠ±Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΠ²ΡΡΡΡ ΠΈΠΌΠ΅Π½Π°
/dev/name/global/dev/name/local/dev/name/global/dev/name/localgloballocal/dev/name/gns_servergns_localΠ‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ API, ΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΠΊ ΡΠ»ΡΠΆΠ±Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½:
name_attach()name_open()name_close()qnx_name_attach()qnx_name_open()qnx_name_close()ΠΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΠ²ΠΎΠ΅ ΠΈΠΌΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ Π² ΡΠ΅ΡΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π° ΡΠ·Π»Π΅, Π³Π΄Π΅ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΠ΅Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ»ΡΠΆΠ±Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½, ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΠ²ΠΎΡ ΡΠ»ΡΠΆΠ±Ρ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² Π²ΡΠ·ΠΎΠ²:
if (!(NameServer = name_attach(NULL, "MyService", NAME_FLAG_ATTACH_GLOBAL)))
Β return EXIT_FAILURE;Π€Π»Π°Π³
NAME_FLAG_ATTACH_GLOBALroot/dev/name/globalMyService/dev/name/localΠ Π΅Π³ΠΈΡΡΡΠΈΡΡΡ ΠΈΠΌΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½, ΡΡΠ½ΠΊΡΠΈΡ
name_attach()NameServerβ’Β
_NTO_CHF_UNBLOCK_PULSE_CODE_UNBLOCKrcvidβ’Β
_NTO_CHF_DISCONNECT_PULSE_CODE_DISCONNECTname_close()name_open()β’Β
_NTO_CHF_COID_DISCONNECT_PULSE_CODE_COIDDEATHcoidΠ’Π΅ΠΏΠ΅ΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°Π½Π°Π»Π°, ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π½Π° ΠΏΡΠΈΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²:
rcvid = MsgReceive(NameServer->chid, &MsgBuf, sizeof MsgBuf);ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊ ΡΠ»ΡΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Ρ Π½Π΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠΈ, ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΎΡΠ»Π°Π½Π½ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΈΡ Β«ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡΒ»:
if (MsgBuf.hdr_type >= _IO_BASE && Buffer.hdr.type <= _IO_MAX) {