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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 118

Автор РобачСвский АндрСй ΠœΠΈΡ…Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‡

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ioctl(2) содСрТит ассоциированныС с Π½Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, число ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависят ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ioctl(2) ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ послСдний ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ· пространства Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ вся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ происходит Π² контСкстС процСсса.

Π­Ρ‚Π° схСма Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° для подсистСмы STREAMS. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сообщСний ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ выполняСтся Π² систСмном контСкстС ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ адрСсному пространству Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ возмоТности ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ адрСсноС пространство Π·Π°Π΄Π°Ρ‡ΠΈ.

Для прСодолСния этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² подсистСмС STREAMS ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… основан Π½Π° использовании ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ioctl(2)

I_STR
. ΠŸΡ€ΠΈ этом Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру
strioctl
:

ioctl(fd, I_STR, (struct strioctl*)arg);

struct strioctl {

Β int ic_cmd;

Β int ic_timout;

Β int ic_len;

Β char* ic_dp;

}

Π³Π΄Π΅

ic_cmd
β€” фактичСская ΠΊΠΎΠΌΠ°Π½Π΄Π°,

ic_timeout
β€” число сСкунд, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ подтвСрТдСния запроса, послС ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ процСссу ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°
ETIME
,

ic_len
β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹,

ic_dp
β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π»ΠΎΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Если Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΎΠ½ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ сообщСниС

M_IOCTL
ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ (
ic_cmd
) ΠΈ Π±Π»ΠΎΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (
ic_len
,
ic_dp
). ПослС этого сообщСниС направляСтся Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Когда ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС, ΠΎΠ½ΠΎ содСрТит всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Если ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ процСссу, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ записываСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΎ ΠΆΠ΅ сообщСниС, измСняСт Π΅Π³ΠΎ Ρ‚ΠΈΠΏ Π½Π°
M_IOCACK
ΠΈ отправляСт Π΅Π³ΠΎ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² процСссу.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ioctl(2) (transparent ioctl). Он позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ioctl(2), Ρ€Π΅ΡˆΠ°Ρ ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ копирования Π΄Π°Π½Π½Ρ‹Ρ…. Когда процСсс выполняСт Π²Ρ‹Π·ΠΎΠ² ioctl(2), Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ сообщСниС

M_IOCTL
ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π½Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° β€”
command
ΠΈ
arg
. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
arg
являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π±Π»ΠΎΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ извСстны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ (ΠΈΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ), ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΌΡƒ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π½Π΅ интСрпрСтируя Π΅Π³ΠΎ ΠΈ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ копируя Π² сообщСниС сам Π±Π»ΠΎΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ пСрСдаСтся Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

Когда ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС, Π² ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΠ½ отправляСт сообщСниС

M_COPYIN
, содСрТащСС Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ располоТСниС Π΄Π°Π½Π½Ρ‹Ρ… [65], Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π“ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ процСсс, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ioctl(2), для копирования ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² контСкстС процСсса, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ доступа ΠΊ Π΅Π³ΠΎ адрСсному пространству Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚. Π“ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ создаСт сообщСниС
M_IOCARGS,
ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π½Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ направляСт сообщСниС Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. ПослС этого процСсс ΠΎΠΏΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС сна.

Когда ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС

M_IOCARGS
, ΠΎΠ½ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ содСрТащиСся Π² Π½Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях для получСния всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½ сообщСниями
M_COPYIN
ΠΈ
M_IOCARGS
. Вакая ситуация ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² являлся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° структуру Π΄Π°Π½Π½Ρ‹Ρ…. Для получСния ΠΊΠΎΠΏΠΈΠΈ структуры ΠΌΠΎΠ΄ΡƒΠ»ΡŽ потрСбуСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ итСрация.

ПослС получСния всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² случаС, Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ процСссу, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько сообщСний

M_COPYOUT
, помСщая Π² Π½ΠΈΡ… Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ направляСт ΠΈΡ… Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Π“ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ процСсс, пСрСдавая Π΅ΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Когда всС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ процСссу, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ посылаСт ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅
M_IOCACK
, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ процСсс Π² послСдний Ρ€Π°Π·, Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ Ρ‚Π΅ΠΌ самым Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° ioctl(2).

ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° STREAMS обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ STREAMS. Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ΠΎΠ² β€” Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ, Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΈ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ. Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ΠΎΠΌ N:1, обСспСчиваСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ² Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠ°Π½Π°Π»Ρƒ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. НиТний ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ΠΎΠΌ 1:M, обСспСчиваСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ² Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠ°Π½Π°Π»Ρƒ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€, ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· названия, позволяСт ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΊΠ°Π½Π°Π»ΠΎΠ² Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ с нСсколькими ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ подсистСма STREAMS обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ сам ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€.

ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ осущСствляСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ открытия ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ младшими Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ. Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с устройством с использованиСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ². Если Π΄Π²Π° процСсса ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ младшиС Π½ΠΎΠΌΠ΅Ρ€Π°, ядро создаст ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ vnode, ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°

<i>xx</i>open()
Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° Π΄Π²Π°ΠΆΠ΄Ρ‹. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΏΠ°Ρ€Ρ‹ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Когда Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΎΡ‚ устройства, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ чтСния ΠΈΡ… Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ дСлаСтся Π½Π° основании ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, содСрТащСйся Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. На рис. 5.23 прСдставлСн Π²ΠΈΠ΄ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Π° с двумя ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_87.jpeg

Рис. 5.23. Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€

НиТний ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ прСдставляСт собой Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ псСвдоустройства. ВмСсто Ρ€Π°Π±ΠΎΡ‚Ρ‹ с физичСским устройством ΠΎΠ½ взаимодСйствуСт с нСсколькими ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Для этого Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ обСспСчиваСт Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ β€” Π½ΠΈΠΆΠ½ΠΈΠΌΠΈ очСрСдями чтСния ΠΈ записи. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

streamtab
Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Π° адрСсуСт ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ интСрфСйс Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΆΠ½ΠΈΠΌΠΈ очСрСдями соотвСтствСнно полями
st_muxrinit
ΠΈ
st_muxwinit
.