Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 125

Автор Роббинс ΠΡ€Π½ΠΎΠ»ΡŒΠ΄

Β /* ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈ ΠΏΡ€Π°Π²Π° доступа, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° 'p' Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ */

prw-r--r-- 1 arnold devel 0 Oct 23 15:49 afifo

$ <b>cat &lt; afifo &amp;</b> /* Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ читатСля Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ */

[1] 22100

$ <b>echo It was a Blustery Day &gt; afifo</b> /* ΠŸΠΎΡΠ»Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² FIFO */

$ It was a Blustery Day /* ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, cat Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ */

Β /* НаТмитС ENTER, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ статус Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ задания */

[1]+ Done cat &lt;afifo /* cat Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ */

9.4. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ дСскрипторами Ρ„Π°ΠΉΠ»ΠΎΠ²

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ части Π·Π°Π³Π°Π΄ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ составлСны,

fork()
ΠΈ
exec()
ΡΠΎΠ·Π΄Π°ΡŽΡ‚ процСссы ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π² Π½ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹,
pipe()
создаСт ΠΊΠ°Π½Π°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для IPC. Π§Π΅Π³ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚, Ρ‚Π°ΠΊ это способа помСщСния дСскрипторов ΠΊΠ°Π½Π°Π»Π° Π½Π° мСсто стандартных Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° для производитСля ΠΈ потрСбитСля ΠΊΠ°Π½Π°Π»Π°.

БистСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹

dup()
ΠΈ
dup2()
, совмСстно с
close()
Π΄Π°ΡŽΡ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ (ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ дСскриптор Ρ„Π°ΠΉΠ»Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€. БистСмный Π²Ρ‹Π·ΠΎΠ²
fcntl()
Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нСсколькими Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

9.4.1. Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²:

dup()
ΠΈ
dup2()

Π”Π²Π° систСмных Π²Ρ‹Π·ΠΎΠ²Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ копию ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ дСскриптора Ρ„Π°ΠΉΠ»Π°:

#include &lt;unistd.h&gt; /* POSIX */

int dup(int oldfd);

int dup2(int oldfd, int newfd);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

int dup(int oldfd)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ наимСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ дСскриптора Ρ„Π°ΠΉΠ»Π°; это копия

oldfd
.
dup()
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π² случаС успСха ΠΈ -1 ΠΏΡ€ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅.

int dup2(int oldfd, int newfd)

Π”Π΅Π»Π°Π΅Ρ‚

newfd
ΠΊΠΎΠΏΠΈΠ΅ΠΉ
oldfd
; Ссли
newfd
ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, ΠΎΠ½ сначала закрываСтся, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ использовании
close()
.
dup2()
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ дСскриптор ΠΈΠ»ΠΈ -1, Ссли Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ рис. 9.1, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π²Π° процСсса раздСляли ΠΎΠ±Ρ‰ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ элСмСнт Ρ„Π°ΠΉΠ»Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ядра?
dup()
ΠΈ
dup2()
ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ‚Ρƒ ΠΆΠ΅ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса. Π‘ΠΌ. рис. 9.4.

Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… - img_17.jpeg

Рис. 9.4. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ дСскриптора Ρ„Π°ΠΉΠ»Π° ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ '

dup2(1, 3)
'

На этом рисункС процСсс Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» '

dup2(1, 3)
', Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ дСскриптор Ρ„Π°ΠΉΠ»Π° 3-ΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ стандартного Π²Ρ‹Π²ΠΎΠ΄Π°, дСскриптора Ρ„Π°ΠΉΠ»Π° 1. Π’ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊ описано Ρ€Π°Π½Π΅Π΅, эти Π΄Π²Π° дСскриптора Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ смСщСниС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.4.2 Β«ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Β» ΠΌΡ‹ упомянули, Ρ‡Ρ‚ΠΎ

open()
(ΠΈ
creat()
) всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ наимСньшСС Ρ†Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ дСскриптора для ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всС систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ дСскрипторы Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ
open()
ΠΈ
creat()
. (
dup2()
являСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ прСдусматриваСт способ получСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ дСскриптора Ρ„Π°ΠΉΠ»Π°, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ Π½Π΅ являСтся наимСньшим Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ дСскриптором.)

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° «возвращСния наимСньшСго Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π°Β» Π² сочСтании с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

dup()
Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ дСскрипторы Ρ„Π°ΠΉΠ»Π° ΠΊΠ°Π½Π°Π»Π° Π½Π° мСсто стандартного Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ процСссом являСтся ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈ Ρ‡Ρ‚ΠΎ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π° ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… процСсса для образования двухступСнчатого ΠΊΠ°Π½Π°Π»Π°, Π²ΠΎΡ‚ эти шаги:

1.Β Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ

pipe()
. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сдСлано сначала, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π° ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… процСсса ΠΌΠΎΠ³Π»ΠΈ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ дСскрипторы ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

2.Β Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ Β«Π»Π΅Π²Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌΒ». Π­Ρ‚ΠΎ процСсс, стандартный Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Ρ‚ Π² ΠΊΠ°Π½Π°Π». Π’ Π΄Π°Π½Π½ΠΎΠΌ процСссС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Β a.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '

close(pipefd[0])
', ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°Π½Π°Π»Π° Π² Π»Π΅Π²ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

Β b.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '

close(1)
', Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ стандартный Π²Ρ‹Π²ΠΎΠ΄.

Β c.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '

dup(pipefd[1])
' для копирования записываСмого ΠΊΠΎΠ½Ρ†Π° ΠΊΠ°Π½Π°Π»Π° Π² дСскриптор Ρ„Π°ΠΉΠ»Π° 1.

Β d.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '

close(pipefd[1])
', ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ дСскриптора.

Β e.Β Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ

exec
для запускаСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

3.Β Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ Β«ΠΏΡ€Π°Π²Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌΒ». Π­Ρ‚ΠΎ процСсс, стандартный Π²Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ поступаСт ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°. Π¨Π°Π³ΠΈ для этого ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ шагов для Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°:

Β a.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '

close(pipefd[1])
', ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ записываСмый ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°Π½Π°Π»Π° Π² ΠΏΡ€Π°Π²ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

Β b.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '

close(0)
', Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ стандартный Π²Π²ΠΎΠ΄.

Β c.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '

dup(pipefd[0])
' для копирования Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΊΠ°Π½Π°Π»Π° Π² дСскриптор Ρ„Π°ΠΉΠ»Π° 0.

Β d.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '

close(pipefd[0])
', ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ дСскриптора.

Β e.Β Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ

exec
для запускаСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

4.Β Π’ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ†Π° ΠΊΠ°Π½Π°Π»Π° β€” '

close(pipefd[0]); close(pipefd[1])
'.

5. НаконСц, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅

wait()
для оТидания Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… процСссов.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ дСскрипторов Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠ°Π½Π°Π»ΠΎΠ². Как ΠΌΡ‹ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΈ Ρ€Π°Π½Π΅Π΅, Ρ„Π°ΠΉΠ» Π½Π΅ закрываСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ послСдний ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ для Π½Π΅Π³ΠΎ дСскриптор. Π­Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΎ, Π΄Π°ΠΆΠ΅ Ссли дСскрипторы Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ нСсколько процСссов. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ дСскрипторов Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ процСсс, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°, Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ указания ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΠΊΠ° всС ΠΊΠΎΠΏΠΈΠΈ записываСмого ΠΊΠΎΠ½Ρ†Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹.

Π’ нашСм случаС послС пороТдСния Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ процСсса, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΠΈ Π΄Π²ΡƒΡ… дСскрипторов Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠ°Π½Π°Π»ΠΎΠ²: Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΈ Π΄Π²Π° ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ…. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ†Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°Π½Π°Π». Π›Π΅Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ записываСт Π² ΠΊΠ°Π½Π°Π», поэтому Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ†. ΠŸΡ€Π°Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°, поэтому Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ записываСмый ΠΊΠΎΠ½Π΅Ρ†. Π­Ρ‚ΠΎ оставляСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ€ΠΎΠ²Π½ΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ дСскриптора Ρ„Π°ΠΉΠ»Π°.