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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 236

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 13.10. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ FIFO

1.Β Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ (пустой) Ρ„Π°ΠΉΠ» FIFO:

$ <b>cat &lt; /tmp/my_fifo</b>

2.Β Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² FIFO. Π’Π°ΠΌ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрвая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ "зависла" Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ появлСния ΠΊΠ°ΠΊΠΈΡ…-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π² FIFO:

$ <b>echo &quot;Hello World&quot; &gt; /tmp/my_fifo</b>

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

cat
. Если Π½Π΅ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠ°Π½Π°Π» FIFO, ΠΊΠΎΠΌΠ°Π½Π΄Π°
cat
Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΠΏΡ€Π΅Ρ€Π²Π΅Ρ‚Π΅ Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ клавиш <Ctrl>+<C>.

3. МоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, пСрСвСдя ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π² Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ:

$ <b>cat &lt; /tmp/my_fifo &amp;</b>

[1] 1316

$ <b>echo &quot;Hello World&quot; &gt; /tmp/my_fifo</b>

Hello World

[1]+ DoneΒ Β  cat &lt;/tmp/my_fifo

$

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠ°Π½Π°Π»Π΅ FIFO Π½Π΅ Π±Ρ‹Π»ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹,

cat
ΠΈ
echo
, ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, оТидая, соотвСтствСнно, поступлСния ΠΊΠ°ΠΊΠΈΡ…-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ процСсса для ΠΈΡ… чтСния.

На Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ шагС процСсс

cat
с самого Π½Π°Ρ‡Π°Π»Π° Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Когда
echo
Π΄Π΅Π»Π°Π΅Ρ‚ доступными Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΠΌΠ°Π½Π΄Π°
cat
Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΡ… ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² стандартный Π²Ρ‹Π²ΠΎΠ΄. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Π½Π΅ доТидаясь Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°
cat
Π½Π΅ блокируСтся, Ρ‚.ΠΊ. ΠΊΠ°Π½Π°Π» ΡƒΠΆΠ΅ закрылся, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ вторая ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠ²ΡˆΠ°Ρ Π΄Π°Π½Π½Ρ‹Π΅ Π² FIFO, поэтому Π²Ρ‹Π·ΠΎΠ²Ρ‹
read
Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅
cat
Π²Π΅Ρ€Π½ΡƒΡ‚ 0 Π±Π°ΠΉΡ‚ΠΎΠ², обозначая этим ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ посмотрСли, ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°Π½Π°Π»Ρ‹ FIFO ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ большС возмоТностСй управлСния опСрациями чтСния ΠΈ записи ΠΏΡ€ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ FIFO.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΊΠ°Π½Π°Π»Π°, созданного Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ

pipe
, FIFO сущСствуСт ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор, ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ· Π½Π΅Π³ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π² Π½Π΅Π³ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…. ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΈ закрываСтся ΠΊΠ°Π½Π°Π» FIFO с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
open
ΠΈ
close
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ€Π°Π½Π΅Π΅ примСняли ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, Π½ΠΎ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями. Π’Ρ‹Π·ΠΎΠ²Ρƒ
open
пСрСдаСтся ΠΏΠΎΠ»Π½ΠΎΠ΅ имя FIFO вмСсто ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ FIFO с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ open

ОсновноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π° FIFO состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ FIFO для чтСния ΠΈ записи с Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ

O_RDWR
. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ нСпрСдсказуСмым. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Ρ‚.ΠΊ., ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠ°Π½Π°Π» FIFO примСняСтся для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, поэтому Π½Π΅Ρ‚ Π½ΡƒΠΆΠ΄Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅
O_RDWR
. ΠŸΡ€ΠΎΡ†Π΅ΡΡ стал Π±Ρ‹ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ свой Π²Ρ‹Π²ΠΎΠ΄, Ссли Π±Ρ‹ ΠΊΠ°Π½Π°Π» Π±Ρ‹Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ для чтСния/записи.

Если Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π² ΠΎΠ±ΠΎΠΈΡ… направлСниях, Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ FIFO ΠΈΠ»ΠΈ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ направлСния ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, ΠΈΠ»ΠΈ (Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎ) явно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°ΠΊΡ€Ρ‹Π² ΠΈ снова ΠΎΡ‚ΠΊΡ€Ρ‹Π² ΠΊΠ°Π½Π°Π» FIFO. ΠœΡ‹ вСрнСмся ΠΊ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΠΌΠ΅Π½Ρƒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°Π½Π°Π»ΠΎΠ² FIFO Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ Π² этой Π³Π»Π°Π²Π΅.

Π”Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ°Π½Π°Π»Π° FIFO ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании Ρ„Π»Π°Π³Π°

open_flag
(Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
open
) со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ
O_NONBLOCK
. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого Ρ€Π΅ΠΆΠΈΠΌΠ°
open
измСняСт способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·ΠΎΠ²Π°
open
, Π½ΠΎ ΠΈ запросов
read
ΠΈ
write
для Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ дСскриптора.

БущСствуСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ допустимых ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

O_RDONLY
,
O_WRONLY
ΠΈ
O_NONBLOCK
Ρ„Π»Π°Π³Π°. Рассмотрим ΠΈΡ… всС ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

open(const char *path, O_RDONLY);

Π’ этом случаС Π²Ρ‹Π·ΠΎΠ²

open
блокируСтся, ΠΎΠ½ Π½Π΅ Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° процСсс Π½Π΅ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ этот FIFO для записи. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
cat
.

open(const char *path, O_RDONLY | O_NONBLOCK);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π·ΠΎΠ²

open
Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈ Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сразу, Π΄Π°ΠΆΠ΅ Ссли ΠΊΠ°Π½Π°Π» FIFO Π½Π΅ Π±Ρ‹Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ для записи ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ процСссом.

open(const char *path, O_WRONLY);

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π²Ρ‹Π·ΠΎΠ²

open
Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° процСсс Π½Π΅ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠ°Π½Π°Π» FIFO для чтСния.

open(const char *path, O_WRONLY | O_NONBLOCK);

Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½ΠΎ Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ процСсс Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π» этот ΠΊΠ°Π½Π°Π» FIFO для чтСния,

open
Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, -1, ΠΈ FIFO Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚. Если Π΅ΡΡ‚ΡŒ процСсс, ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠΈΠΉ FIFO для чтСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для записи Π² ΠΊΠ°Π½Π°Π» FIFO.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π°ΡΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ Π² использовании

O_NONBLOCK
с
O_RDONLY
ΠΈ
O_WRONLY
, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ²
open
для записи Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ, Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ процСсс Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠ°Π½Π°Π» для чтСния, Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ²
open
для чтСния Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. На ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π°
close
Ρ„Π»Π°Π³
O_NONBLOCK
влияния Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 13.11.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 13.11. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² FIFO

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π°

open
с Ρ„Π»Π°Π³ΠΎΠΌ, содСрТащим
O_NONBLOCK
, для синхронизации Π΄Π²ΡƒΡ… процСссов. ВмСсто примСнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ-ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΎΠ΄Π½Ρƒ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ fifo2.c, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»ΠΎΠ² FIFO ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΅ΠΉ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

1. НачнитС с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹

#define
ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ количСства прСдоставлСнных Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

#include &lt;unistd.h&gt;