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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX: взаимодСйствиС процСссов». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 13

Автор Уильям БтивСнс

ipc:

msg-max = 8192

msg-mnb = 16384

msg-mni = 64

msg-tql = 40


shm-max = 4194304

shm-min = 1

shm-mni = 128

shm-seg = 32


sem-mni = 16

sem-msl = 25

sem-opm = 10

sem-ume = 10

sem-vmx = 32767

sem-aem = 16384

num-of-sems = 60

Для этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Ρ„Π°ΠΉΠ» /etc/sysconfigtab. Π”Π΅Π»Π°Ρ‚ΡŒ это слСдуСт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ sysconfigdb. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Ρ‚Π°ΠΊΠΆΠ΅ считываСтся Π² процСссС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы.

3.9. РСзюмС

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ msgget, semget ΠΈ shmget являСтся ΠΊΠ»ΡŽΡ‡ IPC System V. Π­Ρ‚ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ftok. Π’ качСствС ΠΊΠ»ΡŽΡ‡Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ IPCPRIVATE. Π­Ρ‚ΠΈ Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ IPC ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ System V IPC β€” Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для распознавания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΡ€ΠΎΡ‡ΠΈΡ… функциях, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ IPC. Π­Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ смысл Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса (ΠΊΠ°ΠΊ дСскрипторы Ρ„Π°ΠΉΠ»ΠΎΠ²), Π½ΠΎ ΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… всСй систСмы. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ядром, Π½ΠΎ лишь спустя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя.

Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ System V IPC связана структура ipc_perm, содСрТащая ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΌ, Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Ρ€ΡƒΠΏΠΏΡ‹, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ чтСния ΠΈ записи ΠΈ Π΄Ρ€. Одним ΠΈΠ· ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ System V ΠΈ Posix IPC являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° IPC System V эта информация доступна всСгда (доступ ΠΊ Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ XXXctl с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ IPC_STAT), Π° Π² Posix IPC доступ ΠΊ Π½Π΅ΠΉ зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Posix IPC хранится Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС ΠΈ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ Π΅Π³ΠΎ имя Π² Π½Π΅ΠΉ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ стандартныС срСдства Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° System V IPC Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getXXX ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° Ρ„Π»Π°Π³Π° (IPC_CREAT ΠΈ IPC_EXCL) ΠΈ 9 Π±ΠΈΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

Π‘Π΅Π· сомнСния, главнСйшСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² использовании System V IPC являСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ искусствСнных ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π±Π΅Ρ€ΡƒΡ‚ своС Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΡ‚ самых ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для интСнсивного использования срСдств System V IPC прилоТСниями трСбуСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ядра, Π° внСсСниС этих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ систСмС осущСствляСтся ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. 

УпраТнСния

1. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ msgctl Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 6.5 ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² листингС 3.2 Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ выводился Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½ΠΎ ΠΈ ΠΏΠΎΠ»Π΅ seq структуры ipc_perm.

2. ΠΠ΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ послС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ листинга 3.2 ΠΌΡ‹ запускаСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΡƒΡŽ Π΄Π²Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прилоТСния Π½Π΅ использовали ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΈΠ΅ значСния Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ msgget Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ сообщСний.

3. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 3.5 Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getXXX System V IPC Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ маску создания Ρ„Π°ΠΉΠ»Π°. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠ°Π½Π°Π» FIFO (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mkfifΠΎ, описанной Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.6) ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний System V, ΡƒΠΊΠ°Π·Π°Π² для ΠΎΠ±ΠΎΠΈΡ… Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ 666 (Π² Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅). Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для созданных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (FIFO ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний). ΠŸΠ΅Ρ€Π΅Π΄ запуском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ umask ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ нуля.

4. Π‘Π΅Ρ€Π²Π΅Ρ€Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний для своих ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π§Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ постоянноС имя Ρ„Π°ΠΉΠ»Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, имя сСрвСра) Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ftok ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ IPC_PRIVATE?

5. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ листинг 3.1 Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ выводился Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΡŽΡ‡ IPC ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ. ЗапуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ find, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти список всСх Ρ„Π°ΠΉΠ»ΠΎΠ² вашСй Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ вашСй Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Бкольким ΠΈΠΌΠ΅Π½Π°ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡?

6. Π•сли Π² вашСй систСмС Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° sar (system activity reporter β€” информация ΠΎΠ± активности систСмы), запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

sar –m 5 6

На экран Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду с очСрСдями сообщСний ΠΈ сСмафорами, замСряСмыми ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 5 сСкунд 6 Ρ€Π°Π·. 

ЧАБВЬ 2

ΠžΠ‘ΠœΠ•Π Π‘ΠžΠžΠ‘Π©Π•ΠΠ˜Π―ΠœΠ˜

ГЛАВА 4

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹

4.1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

НСимСнованныС ΠΊΠ°Π½Π°Π»Ρ‹ β€” это самая пСрвая Ρ„ΠΎΡ€ΠΌΠ° IPC Π² Unix, появившаяся Π΅Ρ‰Π΅ Π² 1973 Π³ΠΎΠ΄Ρƒ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ вСрсии (Third Edition [17]). НСсмотря Π½Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях, Π³Π»Π°Π²Π½Ρ‹ΠΌ нСдостатком Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² являСтся отсутствиС ΠΈΠΌΠ΅Π½ΠΈ, вслСдствиС Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для взаимодСйствия Ρ‚ΠΎΠ»ΡŒΠΊΠΎ родствСнными процСссами. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ исправлСно Π² Unix System III (1982) Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°Π½Π°Π»ΠΎΠ² FIFO, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ. Доступ ΠΈ ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ, ΠΈ ΠΊ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ организуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ read ΠΈ write.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ (Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅) ΠΊΠ°Π½Π°Π»Ρ‹ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСродствСнными процСссами, Ссли ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ дСскрипторы (см. Ρ€Π°Π·Π΄Π΅Π» 15.8 этой ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π» 13.7 [24]). Однако Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ эти ΠΊΠ°Π½Π°Π»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для осущСствлСния взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ.

Π’ этой Π³Π»Π°Π²Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ создания ΠΈ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² FIFO. ΠœΡ‹ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ сСрвСра Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр, Π² частности постараСмся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ количСство Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² IPC, сравним ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвСры с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ нСструктурированныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±Π°ΠΉΡ‚ΠΎΠ² с сообщСниями.

4.2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° рис. 4.1. ИмСнно Π½Π° Π½Π΅Π³ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π² тСкстС этой Π³Π»Π°Π²Ρ‹ ΠΈ Π³Π»Π°Π²Ρ‹ 6 ΠΏΡ€ΠΈ нСобходимости ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ², FIFO ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ сообщСний System V.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ считываСт ΠΏΠΎΠ»Π½ΠΎΠ΅ имя (Ρ„Π°ΠΉΠ»Π°) ΠΈΠ· стандартного ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π° ΠΈ записываСт Π΅Π³ΠΎ Π² ΠΊΠ°Π½Π°Π» IPC. Π‘Π΅Ρ€Π²Π΅Ρ€ считываСт это имя ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° IPC ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ открытия Ρ„Π°ΠΉΠ»Π° Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. Если ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° оказываСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ, сСрвСр ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΈ записываСт Π΅Π³ΠΎ Π² ΠΊΠ°Π½Π°Π» IPC. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС сСрвСр Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ сообщСниС ΠΎΠ± ошибкС. ΠšΠ»ΠΈΠ΅Π½Ρ‚ считываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° IPC ΠΈ записываСт ΠΈΡ… Π² стандартный ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°. Если сСрвСр Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ считано сообщСниС ΠΎΠ± ошибкС. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ принято содСрТимоС Ρ„Π°ΠΉΠ»Π°. Π”Π²Π΅ ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром Π½Π° рис. 4.1 ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΊΠ°Π½Π°Π» IPC. 

Рис. 4.1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр

4.3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π²ΠΎ всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСализациях ΠΈ вСрсиях Unix. Канал создаСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ pipe ΠΈ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ (одностороннСй) ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…:

#include <unistd.h>

int pipe(int fd[2]);

/* Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0 Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. –1 – Π² случаС ошибки:*/

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскриптора: fd[0] ΠΈ fd[1], ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ для чтСния, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” для записи.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

НСкоторыС вСрсии Unix, Π² частности SVR4, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ двусторонниС ΠΊΠ°Π½Π°Π»Ρ‹ (full-duplex pipes). Π’ этом случаС ΠΊΠ°Π½Π°Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π½Π° запись ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠ½Ρ†ΠΎΠ². Π”Ρ€ΡƒΠ³ΠΎΠΉ способ создания двустороннСго ΠΊΠ°Π½Π°Π»Π° IPC Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ socketpair, описанной Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 14.3 [24]. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ соврСмСнных вСрсий Unix. Однако Ρ‡Π°Ρ‰Π΅ всСго ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄, Π³Π΄Π΅ умСстно использованиС ΠΈΠΌΠ΅Π½Π½ΠΎ односторонних ΠΊΠ°Π½Π°Π»ΠΎΠ².

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ Posix.1 ΠΈ Unix 98 Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ односторонних ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· этого.

Для опрСдСлСния Ρ‚ΠΈΠΏΠ° дСскриптора (Ρ„Π°ΠΉΠ»Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈΠ»ΠΈ FIFO) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макрос S_ISFIFO. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚: ΠΏΠΎΠ»Π΅ st_mode структуры stat ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «истина» (Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) ΠΈΠ»ΠΈ «лоТь» (ноль). Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ stat для ΠΊΠ°Π½Π°Π»Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция fstat. Для FIFO структура возвращаСтся функциями fstat, lstat ΠΈ stat.

На рис. 4.2 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ ΠΊΠ°Π½Π°Π» ΠΏΡ€ΠΈ использовании Π΅Π³ΠΎ СдинствСнным процСссом.

Рис. 4.2. Канал Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΌ процСссС


Π₯отя ΠΊΠ°Π½Π°Π» создаСтся ΠΎΠ΄Π½ΠΈΠΌ процСссом, ΠΎΠ½ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этим процСссом (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°Π½Π°Π»Π° Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΌ процСссС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 5.12). ΠšΠ°Π½Π°Π»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для связи ΠΌΠ΅ΠΆΠ΄Ρƒ двумя процСссами (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ) ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: процСсс создаСт ΠΊΠ°Π½Π°Π», Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ fork, создавая свою копию β€” Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс (рис. 4.3). Π—Π°Ρ‚Π΅ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ для чтСния ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°Π½Π°Π»Π°, Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π½Π° запись ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°Π½Π°Π»Π°. Π­Ρ‚ΠΎ обСспСчиваСт ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 4.4.