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

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

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

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 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.

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

Рис. 9.5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ

На рис. 9.5 (Π°) ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° ситуация послС создания Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΊΠ°Π½Π°Π»Π° (строки 22–25) ΠΈ Π΄Π²ΡƒΡ… ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… процСссов (строки 27–37).

На рис. 9.5 (b) ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ситуация послС закрытия Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΊΠ°Π½Π°Π»Π° (строки 39–40) ΠΈ Π½Π°Ρ‡Π°Π»Π° оТидания ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… процСссов (строки 42–50). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ процСсс помСстил ΠΊΠ°Π½Π°Π» Π½Π° мСсто стандартного Π²Ρ‹Π²ΠΎΠ΄Π° (Π»Π΅Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ, строки 61–63) ΠΈ стандартного Π²Π²ΠΎΠ΄Π° (строки 76–78).

НаконСц, рис. 9.5 (с) ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ послС закрытия ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° (строки 64 ΠΈ 79) ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°

execvp()
(строки 66 ΠΈ 81).

9.4.2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ²:

/dev/fd/XX

МногиС соврСмСнныС систСмы Unix, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ GNU/Linux, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅

/dev/fd
[98] ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ дСскрипторы ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ
/dev/fd/0
,
/dev/fd/1
ΠΈ Ρ‚.Π΄. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
open()
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ дСскриптор Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎ Π² сущности являСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ самым, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹Π·ΠΎΠ²
dup()
для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° дСскриптора.

Π­Ρ‚ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ находят своС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ: Bash,

ksh88
(Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вСрсии) ΠΈ
ksh93
ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ замСщСния процСсса (process substitution), Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹. На ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ запись '
&lt;(...)
', Π° для Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° запись '
&gt;(...)
'. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
diff
ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠ°Π½Π΄. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹:

command1 &gt; /tmp/out.$$.1

command2 &gt; /tmp/out.$$.2

diff /tmp/out.$$.1 /tmp/out.$$.2

rm /tmp/out.$$.1 /tmp/out.$$.2

Π‘ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ процСссов это выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

diff &lt;(command1) &lt;(command2)

НС Π½Π°Π΄ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… бСспорядочных Ρ„Π°ΠΉΠ»ΠΎΠ² для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ запоминания ΠΈ удалСния. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ наш домашний ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ являСтся ссылкой Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³:

$ <b>diff &lt;(pwd) &lt;(/bin/pwd)</b>

1c1

&lt; /home/arnold/work/prenhall/progex

---

&gt; /d/home/arnold/work/prenhall/progex

НСзамысловатая ΠΊΠΎΠΌΠ°Π½Π΄Π°

pwd
являСтся встроСнной Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ: ΠΎΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ логичСский ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСтся ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
cd
. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°
/bin/pwd
осущСствляСт ΠΎΠ±Ρ…ΠΎΠ΄ физичСской Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ.

Как выглядит Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ процСссов? ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° создаСт Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ [99] ('

pwd
' ΠΈ '
/bin/pwd
'). Π’Ρ‹Ρ…ΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… подсоСдиняСтся ΠΊ ΠΊΠ°Π½Π°Π»Ρƒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π² дСскрипторС Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° для Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ процСсса ('
diff
'). Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ процСссу ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π²
<i>/dev/fd</i>
Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ это, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ трассировку исполнСния.

$ <b>set -Ρ…</b> /* Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ трассировку исполнСния */

$ <b>diff &lt;(pwd) &lt;(/bin/pwd)</b> /* Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ */

+ diff /dev/fd/63 /dev/fd/62 /* Врассировка ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ: главная,

Β ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ */

++ pwd /* Врассировка ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ: Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ */

++ /bin/pwd

1c1 /* Π’Ρ‹Π²ΠΎΠ΄ diff */

&lt; /home/arnold/work/prenhall/progex

---

&gt; /d/home/arnold/work/prenhall/progex

Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 9.6.

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

Рис. 9.6. Π—Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ процСсса

Если Π½Π° вашСй систСмС Π΅ΡΡ‚ΡŒ

/dev/fd
, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства этой возмоТности. Однако, Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны ΠΈ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅. ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ с дСскриптором Ρ„Π°ΠΉΠ»Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π‘ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹, Ρ‡Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ записи ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ!

9.4.3. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°:

fcntl()

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

fcntl()
(Β«ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠΌΒ») прСдоставляСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ Π»ΠΈΠ±ΠΎ самого дСскриптора Ρ„Π°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π² Π΅Π³ΠΎ основС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Бправочная страница GNU/Linux fcntl(2) описываСт это Ρ‚Π°ΠΊΠΈΠΌ способом:

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

#include &lt;fcntl.h&gt;

int fcntl (int fd, int cmd);

int fcntl(int fd, int cmd, long arg);