ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΄ΡΠΎΠΌ 4.4BSD ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ΅ΡΠ΅Π· Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π΅ 18 [112].
SVR4 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΡΡΠ³ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π²Π½ΡΡΡΠΈ ΡΠ΄ΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°: ΠΊΠΎΠΌΠ°Π½Π΄Ρ I_SENDFD ΠΈ I_RECVFD ΡΡΠ½ΠΊΡΠΈΠΈ ioctl, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 15.5.1 [110]. ΠΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠ΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΡΠ΄ΡΠ° Π·Π° ΡΡΠ΅Ρ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° Unix. Π ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΌΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² Unix Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΎΡΠΊΡΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠ°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ: ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ Ρ ΠΠ΅ΡΠΊΠ»ΠΈ-ΡΠ΄ΡΠ°ΠΌΠΈ, ΡΠ°ΠΊ ΠΈ Ρ SVR4, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ I_SENDFD ΠΈ I_RECVFD ΡΡΠ½ΠΊΡΠΈΠΈ ioctl ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² SVR4.
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ 4.4BSD ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ sendmsg, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ SVR4 ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ. ΠΠΎ Π²ΡΠ΅Ρ Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ.
Π¨Π°Π³ΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ:
1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° Unix, ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°, ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°.
ΠΡΠ»ΠΈ ΡΠ΅Π»ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠ΄ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ fork Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, Ρ ΡΠ΅ΠΌ ΡΡΠΎΠ±Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΊΡΡΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π» Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ socketpair Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°.
ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ, ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix, ΡΠ²ΡΠ·Π°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ bind Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ connect. ΠΠ°ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix. ΠΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ½ΡΠΉ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° Π½Π΅Π²Π΅Π»ΠΈΠΊΠΈ, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ. ΠΠ°Π»Π΅Π΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ.
2. ΠΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΠ·ΠΎΠ²Π° Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ Unix, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅ΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ open, piΡΠ΅, mkfifo, socket ΠΈΠ»ΠΈ accept. ΠΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Β«ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°Β», Π° Π½Π΅ Β«ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ°ΠΉΠ»Π°Β».
3. ΠΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΡΠΎΠΈΡ ΡΡΡΡΠΊΡΡΡΡ msghdr (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 14.5), ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ. Π POSIX ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, ΡΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (ΡΠ»Π΅ΠΌΠ΅Π½Ρ msg_control ΡΡΡΡΠΊΡΡΡΡ msghdr, ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 14.6), Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ msg_accrights. ΠΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ sendmsg Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ΅ΡΠ΅Π· Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π° ΡΠ°Π³Π΅ 1. ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ, ΡΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Β«Π² ΠΏΠΎΠ»Π΅ΡΠ΅Β». ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°ΠΊΡΠΎΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ sendmsg, Π½ΠΎ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ recvmsg, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ Π΄Π»Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠΏΡΠ°Π²ΠΊΠ° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΡΠ΅ΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ.
4. ΠΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ recvmsg Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ΅ΡΠ΅Π· Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π° ΡΠ°Π³Π΅ 1. ΠΠΎΠΌΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π² ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Π½ΠΎΠΌΠ΅ΡΠ° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π² ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅. ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° β ΡΡΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π½ΠΎΠΌΠ΅ΡΠ° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°. ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π² ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΡ ΠΆΠ΅ Π·Π°ΠΏΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ΄ΡΠ΅, ΡΡΠΎ ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ.
ΠΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ ΡΡΠΎΠ²Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Ρ ΡΠ΅ΠΌ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΈΠΌΠ΅Π» ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ recvmsg, Π½Π΅ Π²ΡΠ΄Π΅Π»ΠΈΠ² ΠΌΠ΅ΡΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π³ΠΎΡΠΎΠ²ΡΠΉ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ [128, Ρ. 518]. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½ΡΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ»Π°Π³Π° MSG_PEEK Π² ΡΡΠ½ΠΊΡΠΈΠΈ recvmsg, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌ.
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°. ΠΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ mycat, ΠΊΠΎΡΠΎΡΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°. ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°. ΠΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Unix open ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π½Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ my_open. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ fork ΠΈ exec Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ΅ΠΉ Π½ΡΠΆΠ½ΡΠΉ ΡΠ°ΠΉΠ». ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ.
ΠΠ° ΡΠΈΡ. 15.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³: Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° mycat ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ socketpair. ΠΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΠ»ΠΈ Π΄Π²Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ socketpair, ΠΊΠ°ΠΊ [0] ΠΈ [1].
Π ΠΈΡ. 15.1. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° mycat ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ socketpair
ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ Π²Π·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ fork, ΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ exec Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ openfile. Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ [1], Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ [0]. (ΠΠ΅Ρ ΡΠ°Π·Π½ΠΈΡΡ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°ΠΊΡΡΡΠΈΠ΅. ΠΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠ³ Π±Ρ Π·Π°ΠΊΡΡΡΡ [1], Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ β [0].) ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΡ Π΅ΠΌΠ°, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π½Π° ΡΠΈΡ. 15.2.
Π ΠΈΡ. 15.2. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° mycat ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ openfile
Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ openfile ΡΡΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ: ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠΊΡΡΡΠΈΡ (ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΠΈΡΡ) ΠΈ Π½ΠΎΠΌΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° (ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΠ»ΠΈ [1]). ΠΡ Π²ΡΠ±ΡΠ°Π»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΠΈΡ ΡΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ Π²Π²ΠΎΠ΄ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ exec. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΎΡΠΊΡΡΡΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. Π‘ΡΠ°ΡΡΡ Π²ΡΡ ΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠΌΠΎΠ³ Π»ΠΈ ΡΠ°ΠΉΠ» ΠΎΡΠΊΡΡΡΡΡΡ, ΠΈ Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π°.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π·Π° ΡΡΠ΅Ρ ΠΏΡΠΈΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΌ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΡΠ°ΠΉΠ»Π° ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΡΠ°Π²Π° ΠΎΡΠΊΡΡΠ²Π°ΡΡ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° Unix (ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π³ΡΡΠΏΠΏΠ° ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅) ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΡ Π»ΡΠ±ΡΠ΅ ΡΠΎΡΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ°. ΠΡ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ mycat, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 15.7.
ΠΠΈΡΡΠΈΠ½Π³ 15.7. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° mycat: ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°
//unixdomain/mycat.c
1 #include "unp.h"
2 int my_open(const char*, int);
3 int
4 main(int argc, char **argv)
5 {
6 int fd, n;
7 char buff[BUFFSIZE];
8 if (argc != 2)
9 err_quit("usage: mycat <pathname>");
10 if ((fd = my_open(argv[1], O_RDONLY)) < 0)
11 err_sys("cannot open %s", argv[1]);
12 while ((n = Read(fd, buff, BUFFSIZE)) > 0)
13 Write(STDOUT_FILENO, buff, n);
14 exit(0);
15 }
ΠΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ my_open Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ open, ΡΡΠ° ΠΏΡΠΎΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ» Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°.
Π€ΡΠ½ΠΊΡΠΈΡ my_open, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 15.8, Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π΄Π»Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Unix open. ΠΠ½Π° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° β ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΈ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠΊΡΡΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, O_RDONLY ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΉΠ» Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ), ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ.
ΠΠΈΡΡΠΈΠ½Π³ 15.8. Π€ΡΠ½ΠΊΡΠΈΡ my_open: ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°
//unixdomain/myopen.c
1 #include "unp.h"
2 int
3 my_open(const char *pathname, int mode)
4 {
5 int fd, sockfd[2], status;
6 pid_t childpid;
7 char c, argsockfd[10], argmode[10];
8 Socketpair(AF_LOCAL, SOCK_STREAM, 0, sockfd);
9 if ((childpid = Fork()) == 0) { /* Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ */
10 Close(sockfd[0]);
11 snprintf(argsockfd, sizeof(argsockfd), "%d", sockfd[1]);
12 snprintf(argmode, sizeof(argmode), "%d", mode);
13 execl("./openfile", "openfile", argsockfd, pathname, argmode,
14 (char*)NULL);
15 err_sys("execl error");
16 }
17 /* ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ - ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° */