ΠΠ΄Π΅ΡΡ ΠΌΡ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π°ΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ- ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, io_read(), io_devctl(), ΠΈ Ρ.ΠΏ.). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ _IO_READ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ my_io_read(), ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ»ΠΈ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΡΡ ΡΡΡΠΎΡΠΊΡ:
io_func.io_read = my_io_read;
ΠΡΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ°Π±Π»ΠΈΡΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ iofunc_func_init() ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π²ΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ POSIX-ΡΡΠΎΠ²Π½Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π΅Π³ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ my_io_read().
ΠΡΠ°ΠΏ 3ΠΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ Π·Π°Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ Π²Π°Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π°Π·ΡΠ²Π°Π»ΡΡ /dev/whatever (Π±ΡΠΊΠ². β Β«/dev/Π°Π±Ρ_ΡΡΠΎΒ» β ΠΏΡΠΈΠΌ. ΡΠ΅Π΄.), ΡΠ°ΠΊ ΡΡΠΎ Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΈΠΌΡ. ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ attr) ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΠΏΡΠ΅ΡΠΈΠΊΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ resmgr_attach() β Π΅ΡΠ»ΠΈ Π±Ρ Π½Π°ΠΌ Π±ΡΠ»ΠΎ Π½Π°Π΄ΠΎ, ΡΡΠΎΠ±Ρ Π½Π°Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΡΠΎΠΉΡΡΠ², Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ resmgr_attach() Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Ρ Π½ΠΎΠ²ΠΎΠΉ Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ, ΡΡΠΎΠ±Ρ Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠ»ΠΈΡΠΈΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°.
ΠΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ io_read()
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ Π²Π°Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠ° ΠΌΠΎΠ³ Π±Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Β«ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉ, ΠΌΠΈΡ!\nΒ». ΠΠ°ΠΆΠ΅ Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΡΠΎΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ΅ΡΡΡ ΡΡΠ΄ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ-ΡΠΎ:
β’ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π°Π½Π½ΡΡ Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΡ;
β’ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° EOF;
β’ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ (ΠΈΠ½Π΄Π΅ΠΊΡ lseek());
β’ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ POSIX-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ stat().
Π£ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π΄Π°Π½Π½ΡΡΠ Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ Π΄Π»ΠΈΠ½ΠΎΠΉ Π² 17 Π±Π°ΠΉΡ, ΡΠΎ Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠΎΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π΅Π½. ΠΡΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠ»ΡΡΠ°Ρ Ρ Π΄ΠΈΡΠΊΠΎΠ²ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ ΡΡΡΠΎΠΊΡ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎΡ Β«ΡΠ°ΠΉΠ»Β» ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΡΠΎΠΊΠΎΠΉ:
char *data_string = "ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉ, ΠΌΠΈΡ!\n";
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ ΡΡΠ΅Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ β ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ, 17 Π±Π°ΠΉΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅. ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡΠ°Π·ΠΈΡΡΡΡ Π½Π° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°Ρ Π²Π°ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ io_read() Π΅Π΅ ΡΠΌΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³Π»Π°ΡΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ , ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π² Π½Π°Π»ΠΈΡΠΈΠΈ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° EOFΠΡΠΎΠ±ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° EOF Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΡΠΈΡΠ°Π» Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Β«\nΒ», Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ Π΅Π³ΠΎ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ EOF.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΠ Β«ΡΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ Β», ΠΈ Β«ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° EOFΒ» ΡΡΠ΅Π±ΡΡΡ, ΡΡΠΎΠ±Ρ Π² OCB, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ Π²Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ io_read(), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ β Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ»Π΅ offset.
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ POSIXΠ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅: ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ POSIX-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΡΡΡΠΏΠ° atime (Β«access timeΒ» β Β«Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ°Β»). ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ stat() ΠΌΠΎΠ³Π»Π° ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, ΡΡΠΎ ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ ΠΊΡΠΎ-ΡΠΎ ΠΎΠ±ΡΠ°ΡΠ°Π»ΡΡ.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠ΄ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠ΅Π½Ρ Π²ΡΠ΅ Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ. ΠΠΈΠΆΠ΅ ΠΌΡ Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ.
/*
* io.read1.c
*/
#include <stdio.h>
#include <errno.h>
#include <sys/neutrino.h>
#include <sys/iofunc.h>
// Π½Π°ΡΠ° ΡΡΡΠΎΠΊΠ° Ρ Π΄Π°Π½Π½ΡΠΌΠΈ
char* data_string = "ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉ, ΠΌΠΈΡ!\n";
int io_read(resmgr_context_t* ctp, io_read_t* msg,
iofunc_ocb_t* ocb) {
int sts;
int nbytes;
int nleft;
int off;
int xtype;
struct _xtype_offset* xoffset;
// 1) ΠΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΎΡΠΊΡΡΡΠΎ Π»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅
if ((sts ==
iofunc_read_verify(ctp, msg, ocb, NULL)) != EOK) {
return sts;
}
// 2) ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ XTYPE
xtype = msg->i.xtype & _IO_XTYPE_MASK;
if (xtype == _IO_XTYPE_OFFSET) {
xoffset = (struct _xtype_offset*)(msg->i + 1);
off = xoffset->offset;
} else if (xtype = _IO_XTYPE_NONE) {
off = ocb->offset;
} else { // ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΠΈΠΏ; ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ
return ENOSYS;
}
// 3) Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡ ΠΎΡΡΠ°Π»ΠΎΡΡ?
nleft = ocb->attr->nbytes β off;
// 4) Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠ΄Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ?
nbytes = min(nleft, msg->i.nbytes);
// 5) ΠΡΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΠ΄Π°ΡΡ ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
if (nbytes) {
MsgReply(ctp->rcvid, nbytes, data_string+off, nbytes);
// 6) Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "atime" Π΄Π»Ρ POSIX stat()
ocb->attr->flags |=
IOFUNC_ATTR_ATIME | IOFUNC_ATTR_DIRTY_TIME;
// 7) ΠΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ lseek() Π½Π΅ ΡΠ°Π²Π΅Π½ _IO_XTYPE_OFFSET,
// ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π΅Π³ΠΎ Π½Π° ΡΠΈΡΠ»ΠΎ ΡΡΠΈΡΠ°Π½Π½ΡΡ Π±Π°ΠΉΡ
if (xtype == _IO_XTYPE_NONE) {
ocb->offset += nbytes;
}
} else {
// 8) ΠΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
MsgReply(ctp->rcvid, EOK, null, 0);
}
// 9) Π‘ΠΊΠ°Π·Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΠΎΡΠ²Π΅ΡΠΈΠ»ΠΈ ΡΠ°ΠΌΠΈ
return _RESMGR_NOREPLY;
}
ΠΡΠ°ΠΏ 1ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ Π²ΡΠ·ΠΎΠ² open() Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΠΎΡΠΈΠ» ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π° ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π±Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΡΡΠ» ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π·Π°ΠΏΠΈΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ Π±Ρ ΡΠ°ΡΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ±ΠΊΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ iofunc_read_verify() Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠ»Π° Π±Ρ Π½Π°ΠΌ (Π·Π°ΡΠ΅ΠΌ ΠΌΡ β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° β ΠΊΠ»ΠΈΠ΅Π½ΡΡ) EBADF, Π° Π½Π΅ EOK.
ΠΡΠ°ΠΏ 2ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ, ΡΠΊΠ°Π·Π°Π» Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° (xtype-override) (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΎΡΠΊΡΡΠ»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΠΎ ΡΡΠΎ ΡΠΊΠ°Π·Π°Π»ΠΎ Π±Ρ, ΡΡΠΎ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π·Π°Π΄Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅). ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ Π°ΡΠΏΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠ° ΡΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΠ°ΠΆΡΠ½ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ iofunc_read_verify(), ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ Π·Π΄Π΅ΡΡ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ NULL, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΡΡΠΈΠΌ, ΡΡΠΎ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Π½Π°Ρ Π½Π΅ Π²ΠΎΠ»Π½ΡΠ΅Ρ.
ΠΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ xtype. ΠΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ _IO_XTYPE_OFFSET, ΠΊΠΎΡΠΎΡΡΠΉ, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈΠ½ΡΡΠΎΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Β«ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠ°ΠΉΠ»Π°Β» Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° (ΡΠ°ΠΊ Π΄Π΅Π»Π°Π΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ pread()). ΠΡΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ _IO_XTYPE_OFFSET Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΌΠ΅Π»ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Β«ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠ°ΠΉΠ»Π°Β». ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ type Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ xtype, ΡΠΎΠ΄Π΅ΡΠΆΠ°Π²ΡΠ΅Π³ΠΎΡΡ Π² ΠΏΡΠΈΠ½ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ, ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ off Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅. ΠΠ°Π»Π΅Π΅, Π½Π° ΡΡΠ°ΠΏΠ΅ 7, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π΅ΡΠ΅ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° _IO_XTYPE_OFFSET.
ΠΡΠ»ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈΠ½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ xtype, ΡΠ΅ΠΌ _IO_XTYPE_OFFSET (ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° _IO_XTYPE_NONE), ΠΌΡ ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ENOSYS. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΡΠ°ΠΏΡ 3 ΠΈ 4Π§ΡΠΎΠ±Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΡΠ°ΠΏΡ 3 ΠΈ 4, Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΡΡΡΠ½ΡΠ΅ΡΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° (ΡΠ°Π·Π½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΈΠ· ocb->attr->nbytes, ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΡΡΡΠΎΠΉΡΡΠ²Π΅). Π£Π·Π½Π°Π², ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡ ΠΎΡΡΠ°Π»ΠΎΡΡ, ΠΌΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΎΡΡΠ°ΡΠΊΠ° ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π±Π°ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ Ρ ΠΎΡΠ΅Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΠ°ΡΡΡΡ ΡΠ΅ΠΌΡ Π±Π°ΠΉΡ, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°Ρ ΠΎΡΠ΅Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π°. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° Π±Π°ΠΉΡΠ°. Π Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π΅ΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°Ρ ΠΎΡΠ΅Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ 4096 Π±Π°ΠΉΡ, Π° Ρ Π½Π°Ρ ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌΡ, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ Π΅ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌΡ Π±Π°ΠΉΡ.
ΠΡΠ°ΠΏ 5Π’Π΅ΠΏΠ΅ΡΡ, Π²ΡΡΠΈΡΠ»ΠΈΠ², ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡ ΠΌΡ Π½Π°ΠΌΠ΅ΡΠ΅Π½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ΄ Π²Π΅ΡΠ΅ΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΌΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΡΠ°ΠΏΠ΅ 5. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π΄Π°Π½Π½ΡΡ Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ data_string + off (ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ off Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°). ΠΡΠΌΠ΅ΡΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ MsgReply() β Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎΠ½ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Β«statusΒ» (Β«ΠΊΠΎΠ΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡΒ»), Π½ΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠΈΡΠ»Π° Π±Π°ΠΉΡ. ΠΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ read() Π·Π½Π°Π΅Ρ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ MsgSendv() (Π° ΡΡΠΎ, ΠΊΡΡΠ°ΡΠΈ, ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ status ΡΡΠ½ΠΊΡΠΈΠΈ MsgReply()) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΠ»ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΡ Π±Π°ΠΉΡ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅.