Β /* ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ ΠΈ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° 'p' Π²ΠΏΠ΅ΡΠ΅Π΄ΠΈ */prw-r--r-- 1 arnold devel 0 Oct 23 15:49 afifo$ <b>cat < afifo &</b> /* ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ */[1] 22100$ <b>echo It was a Blustery Day > afifo</b> /* ΠΠΎΡΠ»Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² FIFO */$ It was a Blustery Day /* ΠΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ, cat Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ */Β /* ΠΠ°ΠΆΠΌΠΈΡΠ΅ ENTER, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠ°ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΡ */[1]+ Done cat <afifo /* cat Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ */9.4. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°ΡΡΠΈ Π·Π°Π³Π°Π΄ΠΊΠΈ ΠΏΠΎΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΡΡΠ°Π²Π»Π΅Π½Ρ,
fork()exec()pipe()Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ
dup()dup2()close()fcntl()9.4.1. ΠΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²:
dup()dup2()ΠΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ°ΠΉΠ»Π°:
#include <unistd.h> /* POSIX */int dup(int oldfd);int dup2(int oldfd, int newfd);Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
int dup(int oldfd)ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ°ΠΉΠ»Π°; ΡΡΠΎ ΠΊΠΎΠΏΠΈΡ
oldfddup()int dup2(int oldfd, int newfd)ΠΠ΅Π»Π°Π΅Ρ
newfdoldfdnewfdclose()dup2()dup()dup2()
Π ΠΈΡ. 9.4. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ '
dup2(1, 3)ΠΠ° ΡΡΠΎΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» '
dup2(1, 3)Π ΡΠ°Π·Π΄Π΅Π»Π΅ 4.4.2 Β«ΠΡΠΊΡΡΡΠΈΠ΅ ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Β» ΠΌΡ ΡΠΏΠΎΠΌΡΠ½ΡΠ»ΠΈ, ΡΡΠΎ
open()creat()open()creat()dup2()ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Β«Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅ΡΠ°Β» Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ
dup()1.Β Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°Π½Π°Π» Ρ ΠΏΠΎΠΌΠΎΡΡΡ
pipe()2.Β Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ Β«Π»Π΅Π²ΡΠΌ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌΒ». ΠΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠ΄Π΅Ρ Π² ΠΊΠ°Π½Π°Π». Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
Β a.Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ '
close(pipefd[0])Β b.Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ '
close(1)Β c.Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ '
dup(pipefd[1])Β d.Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ '
close(pipefd[1])Β e.Β ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ
exec3.Β Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ Β«ΠΏΡΠ°Π²ΡΠΌ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌΒ». ΠΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°. Π¨Π°Π³ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΡΠ²Π»ΡΡΡΡΡ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π³ΠΎΠ² Π΄Π»Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°:
Β a.Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ '
close(pipefd[1])Β b.Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ '
close(0)Β c.Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ '
dup(pipefd[0])Β d.Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ '
close(pipefd[0])Β e.Β ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ
exec4.Β Π ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ Π·Π°ΠΊΡΡΡΡ ΠΎΠ±Π° ΠΊΠΎΠ½ΡΠ° ΠΊΠ°Π½Π°Π»Π° β '
close(pipefd[0]); close(pipefd[1])5.Β ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅
wait()ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠ°Π½Π°Π»ΠΎΠ². ΠΠ°ΠΊ ΠΌΡ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΈ ΡΠ°Π½Π΅Π΅, ΡΠ°ΠΉΠ» Π½Π΅ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΎΡΠΊΡΡΡΡΠΉ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ. ΠΡΠΎ Π²Π΅ΡΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ°Π·Π΄Π΅Π»ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠ°ΠΊΡΡΡΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΡΠΈΡΠ°ΡΡΠΈΠΉ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°, Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π°, ΠΏΠΎΠΊΠ° Π²ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ° Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΠΊΡΡΡΡ.
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² ΠΈΠΌΠ΅ΡΡΡΡ ΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΠΈ Π΄Π²ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠ°Π½Π°Π»ΠΎΠ²: ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈ Π΄Π²Π° ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΡ . Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΠΎΠ±Π° ΠΊΠΎΠ½ΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅ΠΌΡ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΠΊΠ°Π½Π°Π». ΠΠ΅Π²ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π² ΠΊΠ°Π½Π°Π», ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ ΠΊΠΎΠ½Π΅Ρ. ΠΡΠ°Π²ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠ½Π΅Ρ. ΠΡΠΎ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΡΠΎΠ²Π½ΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ°ΠΉΠ»Π°.