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

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

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

 RESMGR_OCB_T *ocb)

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

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

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

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

БообщСния: _IO_CHMOD

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

struct _io_chmod {

 uint16_t type;

 uint16_t combine_len;

 mode_t   mode;

};


typedef union {

 struct _io_chmod i;

} io_chmod_t;

ОписаниС: ΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° доступа ΠΊ рСсурсу, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌ Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ocb, Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, содСрТащССся Π² ΠΏΠΎΠ»Π΅ сообщСния mode.

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

io_chown()

int io_chown(resmgr_context_t *ctp, io_chown_t *msg,

 RESMGR_OCB_T *ocb)

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

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

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

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

БообщСния: _IO_CHOWN

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

struct _io_chown {

 uint16_t type;

 uint16_t combine_len;

 int32_t  gid;

 int32_t  uid;

};


typedef union {

 struct _io_chown i;

} io_chown_t;

ОписаниС: ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½Π° Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ для рСсурса, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌ Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ocb, соотвСтствСнно Π² значСния uid ΠΈ gid. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, позволяСт Π»ΠΈ данная файловая систСма Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ chown() ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (root), Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ запись Ρ‚ΠΎΡ‡ΠΊΠΈ монтирования Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Ρ„Π»Π°Π³Π° IOFUNC_PC_CHOWN_RESTRICTED, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅ flags Π² OCB.

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

io_close_dup()

int io_close_dup(resmgr_context_t *ctp, io_close_t *msg,

 RESMGR_OCB_T *ocb)

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

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

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

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ функция. close(), fclose()

БообщСния: _IO_CLOSE_DUP

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

struct _io_close {

 uint16_t type;

 uint16_t combine_len;

};


typedef union {

 struct _io_close i;

} io_close_t;

ОписаниС: Π­Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ клиСнтских Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² close() ΠΈ fclose(). ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ придСтся ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ; оставляйтС Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ iofunc_close_dup_default(). ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ этому слуТит Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ отслСТиваСт число сообщСний open(), dup() ΠΈ close(), Π²Ρ‹Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ OCB, ΠΈ синтСзируСт Π²Ρ‹Π·ΠΎΠ² io_close_ocb() (см. Π½ΠΈΠΆΠ΅) послС получСния для Π΄Π°Π½Π½ΠΎΠ³ΠΎ OCB послСднСго сообщСния close(). ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»Π΅ΠΉ, располоТСнныС Π² ctp->rcvid, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ io_open(); ΠΎΠ΄Π½Π°ΠΊΠΎ, совпадСниС ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° гарантируСтся. Β«Π›ΠΈΡˆΠ½ΠΈΠ΅Β» ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»Π΅ΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ…) Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‚ΠΈΠΏΠ° dup().

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

io_close_ocb()

int io_close_ocb(resmgr_context_t *ctp, void* reserved,

 RESMGR_OCB_T *ocb)

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

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

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: НСт

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ функция: НСт (синтСзируСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ)

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

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

// БинтСзируСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ

struct _io_close {

 uint16_t type;

 uint16_t combine_len;

};


typedef union {

 struct _io_close i;

} io_close_t;

ОписаниС: Π­Ρ‚ΠΎ функция, которая синтСзируСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° для Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ OCB ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ послСднСС сообщСниС close(). Π­Ρ‚ΠΎ Ρ‚ΠΎ самоС мСсто, Π³Π΄Π΅ Π²Π°ΠΌ слСдуСт Β«ΠΏΠΎΠ΄Ρ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΒ» всС ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ OCB. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ отправитСля Π² ctp->rcvid Π΅ΡΡ‚ΡŒ Π½ΡƒΠ»ΡŒ (0), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ данная функция синтСзируСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ соотвСтствуСт ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ.

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

io_devctl()

int io_devctl(resmgr_context_t *ctp, io_devctl_t *msg,

 RESMGR_OCB_T *ocb)

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

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

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

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

БообщСния: _IO_DEVCTL

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

struct _io_devctl {

 uint16_t type;

 uint16_t combine_len;

 int32_t  dcmd;

 int32_t  nbytes;

 int32_t  zero;

};


struct _io_devctl_reply {

 uint32_t zero;

 int32_t  ret_val;

 int32_t  nbytes;

 int32_t  zero2;

};


typedef union {

 struct _io_devctl       i;

 struct _io_devctl_reply o;

} io_devctl_t;

ОписаниС: ВыполняСт Π½Π°Π΄ устройством ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ ΠΎΡ‚ клиСнтской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ devctl() Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ dcmd. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… двумя ΡΡ‚Π°Ρ€ΡˆΠΈΠΌΠΈ разрядами dcmd, указывая этим, ΠΊΠ°ΠΊ функция devctl() Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ (ΠΏΠΎΠ»Π΅ Β«toΒ» соотвСтствуСт Π±ΠΈΡ‚Ρƒ _POSIX_DEVDIR_TO, ΠΏΠΎΠ»Π΅ Β«fromΒ» β€” Π±ΠΈΡ‚Ρƒ _POSIX_DEVDIR_FROM):

ПолС Β«toΒ» ПолС Β«fromΒ» Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 0 ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅Ρ‚ 0 1 ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ 1 0 ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ 1 1 ДвунаправлСнная ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°

Π’ случаС, ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅Ρ‚, прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ просто выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π·Π°Π΄Π°Π½Π½ΡƒΡŽ Π² dcmd. Π’ случаС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΈ/ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ resmgr_msgreadv() ΠΈ resmgr_msgwritev(). ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² ΠΏΠΎΠ»Π΅ nbytes; Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ число ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π±Π°ΠΉΡ‚ Π² ΠΏΠΎΠ»Π΅ nbytes исходящСй структуры.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Ρ‹ нулями, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ нСявная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… начинаСтся Π² этих структурах с Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого адрСса.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ iofunc_devctl(), Ρ‚ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ссли ΠΎΠ½Π° Π½Π΅ смоТСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ с сообщСниСм devctl(), ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π²Π°ΠΌ константу _RESMGR_DEFAULT. Π­Ρ‚Π° сдСлано для отдСлСния ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ errno ΠΎΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° «нСраспознанная ΠΊΠΎΠΌΠ°Π½Π΄Π°Β». ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² _RESMGR_DEFAULT, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ установкой errno Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ENOSYS, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ транслировано клиСнтской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ devctl() Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ENOTTY, Β«ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅Β» с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния POSIX.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π΅ΠΆΠΈΠΌΠ° открытия ΠΈ сопоставлСниС Π΅Π³ΠΎ с выполняСмой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π»Π΅ΠΆΠΈΡ‚ всСцСло Π½Π° совСсти вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Π½ΠΈ Π² клиСнтской devctl(), Π½ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ администратора рСсурсов Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π΅ выполняСтся. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ администратор рСсурса Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния», Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ посрСдством devctl() ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ТСсткий диск» (которая, Π² ΠΎΠ±Ρ‰Π΅ΠΌ, являСтся вСсьма Π½Π΅Ρ…ΠΈΠ»ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ записи). Π’Π°ΠΊ Π²ΠΎΡ‚, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния администратора Π±Ρ‹Π»ΠΎ Π±Ρ‹ вСсьма ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎ выполнСния Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ открытия рСсурса.