Π‘ΡΡΠΎΠΊΠΈ 72β83 Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΆΠ΅ ΡΠ°Π³ΠΈ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°. ΠΠΎΡ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅:
$ <b>ch09-pipeline</b> /* ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */left child terminated, status: 0 /* ΠΠ΅Π²ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π΄ΠΎ Π²ΡΠ²ΠΎΠ΄Π° (!) */hello there /* ΠΡΠ²ΠΎΠ΄ ΠΎΡ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° */right child terminated, status: 0$ <b>ch09-pipeline</b> /* ΠΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */hello there /* ΠΡΠ²ΠΎΠ΄ ΠΎΡ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΈ ... */right child terminated, status: 0 /* ΠΡΠ°Π²ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π΄ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ */left child terminated, status: 0ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠΈ, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. ΠΠ½ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠ°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠ²ΠΈΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΡΠΎΠ·Π΄Π°ΡΡΠ΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π² ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ
wait()ΠΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΈΡ. 9.5.



Π ΠΈΡ. 9.5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ
ΠΠ° ΡΠΈΡ. 9.5 (Π°) ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΊΠ°Π½Π°Π»Π° (ΡΡΡΠΎΠΊΠΈ 22β25) ΠΈ Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (ΡΡΡΠΎΠΊΠΈ 27β37).
ΠΠ° ΡΠΈΡ. 9.5 (b) ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΊΠ°Π½Π°Π»Π° (ΡΡΡΠΎΠΊΠΈ 39β40) ΠΈ Π½Π°ΡΠ°Π»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (ΡΡΡΠΎΠΊΠΈ 42β50). ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ» ΠΊΠ°Π½Π°Π» Π½Π° ΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° (Π»Π΅Π²ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ, ΡΡΡΠΎΠΊΠΈ 61β63) ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° (ΡΡΡΠΎΠΊΠΈ 76β78).
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠΈΡ. 9.5 (Ρ) ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° (ΡΡΡΠΎΠΊΠΈ 64 ΠΈ 79) ΠΈ Π²ΡΠ·ΠΎΠ²Π°
execvp()9.4.2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ²:
/dev/fd/XXΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Unix, Π²ΠΊΠ»ΡΡΠ°Ρ GNU/Linux, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅
/dev/fd/dev/fd/0/dev/fd/1open()dup()ΠΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π°Ρ ΠΎΠ΄ΡΡ ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ: Bash,
ksh88ksh93<(...)>(...)diffcommand1 > /tmp/out.$$.1command2 > /tmp/out.$$.2diff /tmp/out.$$.1 /tmp/out.$$.2rm /tmp/out.$$.1 /tmp/out.$$.2Π‘ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
diff <(command1) <(command2)ΠΠ΅ Π½Π°Π΄ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π±Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π½Π°Ρ Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³:
$ <b>diff <(pwd) <(/bin/pwd)</b>1c1< /home/arnold/work/prenhall/progex---> /d/home/arnold/work/prenhall/progexΠΠ΅Π·Π°ΠΌΡΡΠ»ΠΎΠ²Π°ΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°
pwdcd/bin/pwdΠΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²? ΠΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ [99] ('
pwd/bin/pwddiff<i>/dev/fd</i>$ <b>set -Ρ
</b> /* ΠΠΊΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ */$ <b>diff <(pwd) <(/bin/pwd)</b> /* ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ */+ diff /dev/fd/63 /dev/fd/62 /* Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ: Π³Π»Π°Π²Π½Π°Ρ,Β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ */++ pwd /* Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ: Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */++ /bin/pwd1c1 /* ΠΡΠ²ΠΎΠ΄ diff */< /home/arnold/work/prenhall/progex---> /d/home/arnold/work/prenhall/progexΠΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 9.6.

Π ΠΈΡ. 9.6. ΠΠ°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°
ΠΡΠ»ΠΈ Π½Π° Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΅ΡΡΡ
/dev/fd9.4.3. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΡΠ°ΠΉΠ»Π°:
fcntl()Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ²
fcntl()#include <unistd.h> /* POSIX */#include <fcntl.h>int fcntl (int fd, int cmd);int fcntl(int fd, int cmd, long arg);