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() ΠΊΠΎΠΌΠ°Π½Π΄Ρ Β«ΠΎΡΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΆΠ΅ΡΡΠΊΠΈΠΉ Π΄ΠΈΡΠΊΒ» (ΠΊΠΎΡΠΎΡΠ°Ρ, Π² ΠΎΠ±ΡΠ΅ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π΅ΡΡΠΌΠ° Π½Π΅Ρ ΠΈΠ»ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ). Π’Π°ΠΊ Π²ΠΎΡ, Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π±ΡΠ»ΠΎ Π±Ρ Π²Π΅ΡΡΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ΅ΡΡΡΡΠ°.