Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² QNX/Neutrino 2. Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² QNX Realtime PlatformΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 68

Автор Π ΠΎΠ± ΠšΡ‘Ρ€Ρ‚Π΅Π½

int io_space(resmgr_context_t *ctp, io_space_t *msg,

 RESMGR_OCB_T *ocb)

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ: Ѐункция Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: НСт

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: iofunc_space_verify()

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ функция: chsize(), fcntl(), ftruncate(), ltrunc()

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ _IO_SPACE

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…:

struct _io_space {

 uint16_t type;

 uint16_t combine_len;

 uint16_t subtype;

 short    whence;

 uint64_t start;

 uint64_t len;

};


typedef union {

 struct _io_space i;

 uint64_t         o;

} io_space_t;

ОписаниС: Π­Ρ‚Π° функция примСняСтся для выдСлСния ΠΈΠ»ΠΈ освобоТдСния Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ рСсурсом пространства. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ subtype (Β«ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΒ») ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, слСдуСт Π»ΠΈ это пространство Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ (Ссли Ρ€Π°Π²Π΅Π½ F_ALLOCSP) ΠΈΠ»ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ (Ссли Ρ€Π°Π²Π΅Π½ F_FREESP). ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² whence (Β«ΠΎΡ‚ΠΊΡƒΠ΄Π°Β») ΠΈ start (Β«Π½Π°Ρ‡Π°Π»ΠΎΒ») ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π³Π΄Π΅ слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅/ освобоТдСниС; элСмСнт len ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚: Число Π±Π°ΠΉΡ‚ΠΎΠ² (Ρ€Π°Π·ΠΌΠ΅Ρ€ рСсурса), посрСдством Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ макроса _RESMGR_STATUS.

io_stat()

int io_stat(resmgr_context_t *ctp, io_stat_t *msg,

 RESMGR_OCB_T *ocb)

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ: Ѐункция Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: iofunc_stat_default()

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: iofunc_stat()

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ функция: stat(), lstat(), fstat()

БообщСния: _IO_STAT

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…:

struct _io_stat {

 uint16_t type;

 uint16_t combine_len;

 uint32_t zero;

};


typedef union (

 struct _io_stat i;

 struct stat     o;

} io_stat_t;

ОписаниС: ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСниС, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ рСсурсС, связанном с ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ OCB. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ атрибутная запись содСрТит всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для выполнСния запроса stat(). Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция iofunc_stat() заполняСт структуру struct stat, Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠΉ записи. Π­Ρ‚Π° Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция Ρ‚Π°ΠΊΠΆΠ΅ измСняСт сохранСнныС элСмСнты dev/rdev Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° (это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² stat() Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ сСти). ΠŸΠΈΡΠ°Ρ‚ΡŒ этот ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ особого смысла Π½Π΅Ρ‚.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚: Код Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ макроса _RESMGR_STATUS, ΠΈ структуру struct stat β€” Π² ΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΠΌ сообщСнии.

io_sync()

int io_sync(resmgr_context_t *ctp, io_sync_t *msg,

 RESMGR_OCB_T *ocb)

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ: Ѐункция Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: iofunc_sync_default()

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: iofunc_sync_verify(), iofunc_sync()

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ функция: fsync(), fdatasync()

БообщСния: _IO_SYNC

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…:

struct _io_sync {

 uint16_t type;

 uint16_t сombine_len;

 uint32_t flag;

};


typedef union {

 struct _io_sync i;

} io_sync_t;

ОписаниС: Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ flush (синхронизация носитСля ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, диска с дисковым кэшСм β€” ΠΏΡ€ΠΈΠΌ. Ρ€Π΅Π΄.). Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция iofunc_sync() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ flag Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ дСйствия ваш администратор рСсурсов Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

β€’ 0 β€” Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ;

β€’ O_SYNC β€” всС, Ρ‡Ρ‚ΠΎ связано с Ρ„Π°ΠΉΠ»ΠΎΠΌ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ содСрТимоС Ρ„Π°ΠΉΠ»Π°, элСмСнты ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², индСксныС дСскрипторы (inodes), ΠΈ Ρ‚.Π΄.) Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° носитСлС ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ восстанавливаСмым с Π½Π΅Π³ΠΎ.

β€’ O_DSYNC β€” ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° носитСлС ΠΈ Π±Ρ‹Ρ‚ΡŒ восстанавливаСмыми с Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π°.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ эта функция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ согласились ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sync, установив ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π»Π°Π³ Π² записи Ρ‚ΠΎΡ‡ΠΊΠΈ монтирования.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚: Код Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ макроса _RESMGR_STATUS.

io_umount()

int io_umount(resmgr_context_t *ctp, void *msg,

 RESMGR_OCB_T *ocb)

Данная функция Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π° QSSL для Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ использования. Π’Π°ΠΌ слСдуСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ iofunc_func_init(), ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π°.

io_unblock() [установлСниС соСдинСния]

int io_unblock(resmgr_context_t *ctp, io_pulse_t *msg,

 RESMGR_HANDLE_T *handle, void* reserved)

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ: Ѐункция установлСния соСдинСния (синтСзируСтся ядром ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ)

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: НСт

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: iofunc_unblock()

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ функция: НСт (вызываСтся ядром вслСдствиС сигнала ΠΈΠ»ΠΈ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°)

БообщСния: НСт (синтСзируСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ)

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…: (см. Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ io_unblock() для Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Π½ΠΈΠΆΠ΅)

ОписаниС: Π­Ρ‚ΠΎ вСрсия Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π² Ρ„ΠΎΡ€ΠΌΠ΅ сообщСния установлСния соСдинСния, синтСзируСмая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΈΠΌΠΏΡƒΠ»ΡŒΡ ΠΎΡ‚ ядра, возникший Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ТСлания ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° этапС установлСния соСдинСния. Π‘ΠΌ. Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° Π½ΠΈΠΆΠ΅.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚: Код Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ макроса _RESMGR_STATUS.

Π‘ΠΌ. ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ обсуТдСниС стратСгий разблокирования Π² Π³Π»Π°Π²Π΅ «ОбмСн сообщСниями», ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ Β«ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° _NTO_MI_UNBLOCK_REQΒ».

io_unblock() [Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄]

int io_unblock(resmgr_context_t *ctp, io_pulse_t *msg,

 RESMGR_OCB_T *ocb)

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ: Ѐункция Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° (синтСзируСтся ядром ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ)

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: iofunc_unblock_default()

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: iofunc_unblock()

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ функция: НСт (рСакция ядра Π½Π° сигнал ΠΈΠ»ΠΈ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚)

БообщСния: НСт (синтСзируСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ)

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½Π° структуру, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ сообщСниС

ОписаниС: Π­Ρ‚ΠΎ вСрсия Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° для сообщСния Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, синтСзируСмая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ° ΠΎΡ‚ ядра, возникшСго вслСдствиС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° этапС Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ io_unblock() для Ρ„Π°Π·Ρ‹ установлСния соСдинСния ΠΏΠΎΡ‡Ρ‚ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ (см. ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„).

ΠžΠ±Ρ‰ΠΈΠΌ для ΠΎΠ±Π΅ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (ΠΊΠ°ΠΊ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ установлСния соСдинСния, Ρ‚Π°ΠΊ ΠΈ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°) являСтся ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ администратора рСсурсов. Администратор рСсурсов обязан ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° клиСнтскоС сообщСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. (ΠœΡ‹ это обсуТдали Π² Π³Π»Π°Π²Π΅ «ОбмСн сообщСниями», ΠΊΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ„Π»Π°Π³Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ChannelCreate() β€” Π² частности, ΠΎ Ρ„Π»Π°Π³Π΅ _NTO_CHF_UNBLOCK).

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚: Код Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ макроса _RESMGR_STATUS.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ обсуТдСниС стратСгий разблокирования см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° _NTO_MI_UNBLOCK_REQΒ» Π² Π³Π»Π°Π²Π΅ «ОбмСн сообщСниями».

io_unlink()

int io_unlink(resmgr_context_t *ctp, io_unlink_t *msg,

 RESMGR_HANDLE_T* handle, void* reserved)

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ: Ѐункция установлСния соСдинСния

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: НСт

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: iofunc_unlink()

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ функция: unlink()

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: _IO_CONNECT, ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ _IO_CONNECT_UNLINK

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…:

struct _io_connect {

 // Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ поля (ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅)

 uint16_t path_len;

 uint8_t  extra_type;

 uint16_t extra_len;

 char     path[1];

};


struct _io_connect_link_reply {

 uint32_t reserved1[2];

 uint8_t  eflag;

 uint8_t  reserved2[3];