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

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

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

Как ΠΈ Π² случаС

F_GETLK
, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ участок опрСдСляСтся значСниями элСмСнтов
l_start
,
l_whence
ΠΈ
l_len
структуры
flock
. Если Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° установлСна, Π²Ρ‹Π·ΠΎΠ²
fcntl
Π²Π΅Ρ€Π½Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ -1, ΠΏΡ€ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ возвращаСтся -1. Π’Ρ‹Π·ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ F_SETLKW ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° command

Команда

F_SETLKW
Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅
F_SETLK
Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ нСвозмоТности установки Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ прСдставится. ПослС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² состояниС оТидания Π²Ρ‹Π·ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ установлСна ΠΈΠ»ΠΈ появится сигнал. Π‘ΠΈΠ³Π½Π°Π»Ρ‹ ΠΌΡ‹ обсудим Π² Π³Π»Π°Π²Π΅ 11.

ВсС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°, установлСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, автоматичСски ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° закрываСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ дСскриптор Ρ„Π°ΠΉΠ»Π°. Π’ΠΎ ΠΆΠ΅ самоС происходит, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² read ΠΈ write ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Когда Π²Ρ‹ примСняСтС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ участков Ρ„Π°ΠΉΠ»Π°, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹

read
ΠΈ
write
вмСсто высокоуровнСвых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
fread
ΠΈ
fwrite
. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
fread
ΠΈ
fwrite
Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ»ΠΈ записываСмых Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ²Π°
fread
для считывания 100 Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ (ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ навСрняка Π±ΡƒΠ΄Π΅Ρ‚), считано Π±ΠΎΠ»Π΅Π΅ 100 Π±Π°ΠΉΡ‚ΠΎΠ², ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈΠ±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
fread
для считывания ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… 100 Π±Π°ΠΉΡ‚ΠΎΠ², ΠΎΠ½Π° Π½Π° самом Π΄Π΅Π»Π΅ считаСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ
read
ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ большС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π² Ρ‡Π΅ΠΌ Ρ‚ΡƒΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, рассмотрим Π΄Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„Π°ΠΉΠ». ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» содСрТит 200 Π±Π°ΠΉΡ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, всС Π½ΡƒΠ»ΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ устанавливаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° запись для ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 100 Π±Π°ΠΉΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π°. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

fread
для считывания этих 100 Π±Π°ΠΉΡ‚ΠΎΠ². Однако, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²,
fread
Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ большС, Π΄ΠΎ
BUFSIZ
Π±Π°ΠΉΡ‚ΠΎΠ², поэтому ΠΎΠ½Π° Π½Π° самом Π΄Π΅Π»Π΅ считаСт Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ вСсь Ρ„Π°ΠΉΠ», Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Π΅Ρ€Π½Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 100 Π±Π°ΠΉΡ‚ΠΎΠ².

Π—Π°Ρ‚Π΅ΠΌ стартуСт вторая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Она устанавливаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ

write
Π½Π° Π²Ρ‚ΠΎΡ€Ρ‹Π΅ 100 Π±Π°ΠΉΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ дСйствиС Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 100 Π±Π°ΠΉΡ‚ΠΎΠ². Вторая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° записываСт Π΄Π²ΠΎΠΉΠΊΠΈ Π² Π±Π°ΠΉΡ‚Ρ‹ с 100-Π³ΠΎ ΠΏΠΎ 199-ΠΉ, Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ», снимаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Π’ это врСмя пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‚ΠΎΡ€Ρ‹Π΅ 100 Π±Π°ΠΉΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π° ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
fread
для ΠΈΡ… считывания. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти Π΄Π°Π½Π½Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΡƒΠΆΠ΅ занСсСны Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π² Π±ΡƒΡ„Π΅Ρ€, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ 100 Π±Π°ΠΉΡ‚ΠΎΠ² Π½ΡƒΠ»Π΅ΠΉ, Π° Π½Π΅ 100 Π΄Π²ΠΎΠ΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π° самом Π΄Π΅Π»Π΅ хранятся Π² Ρ„Π°ΠΉΠ»Π΅ Π½Π° ТСстком дискС. Подобной ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ссли Π²Ρ‹ примСняСтС Π²Ρ‹Π·ΠΎΠ²Ρ‹
read
ΠΈ
write
.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ описаниС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТноватым, Π½ΠΎ Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.9.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.9. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π°
fcntl

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ lock3.с. Для опробования Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π²Π°ΠΌ понадобятся Π΄Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΎΠ΄Π½Π° для установки Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ другая для Π΅Π΅ тСстирования. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ.

1. НачнитС с Ρ„Π°ΠΉΠ»ΠΎΠ²

include
ΠΈ объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <fcntl.h>

const char *test_file = "/tmp/test_lock";

int main() {

Β int file desc;

Β int byte_count;

Β char *byte_to_write = "A";

Β struct flock region_1;

Β struct flock region_2;

Β int res;

2.Β ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор:

Β file_desc = open(test_file, O_RDWR | O_CREAT, 0666);

Β if (!file_desc) {

Β  fprintf(stderr, "Unable to open %s for read/write\n", test_file);

Β Β exit(EXIT_FAILURE);

Β }

3.Β ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»:

Β for (byte_count = 0; byte_count < 100; byte_count++) {

Β Β (void)write(file_desc, byte_to_write, 1);

Β }

4.Β Π—Π°Π΄Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для участка region 1 с 10-Π³ΠΎ Π±Π°ΠΉΡ‚Π° ΠΏΠΎ 30-ΠΉ:

Β region_1.l_type = F_RDLCK;

Β region_1.l_whence = SEEK_SET;

Β region_1.l_start = 10;

Β region_1.l_len = 20;

5.Β Π—Π°Π΄Π°ΠΉΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для участка region_2 с 40-Π³ΠΎ Π±Π°ΠΉΡ‚Π° ΠΏΠΎ 50-ΠΉ:

Β region_2.l_type = F_WRLCK;

Β region_2.l_whence = SEEK_SET;

Β region_2.l_start = 40;

Β region_2.l_len = 10;

6.Β Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»:

Β printf("Process %d locking file\n", getpid());

Β res = fcntl(file_desc, F_SETLK, &region_1);

Β if (res == -1) fprintf(stderr, "Failed to lock region 1\n");

Β res = fcntl(file_desc, F_SETLK, &region_2);

Β if (res = fprintf(stderr, "Failed to lock region 2\n");

7.Β ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя:

Β sleep(60);

Β printf ("Process %d closing file\n", getpid());

Β close(file_desc);

Β exit(EXIT_SUCCESS);

}

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

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт Ρ„Π°ΠΉΠ», ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ для чтСния ΠΈ записи ΠΈ Π·Π°Ρ‚Π΅ΠΌ заполняСт Ρ„Π°ΠΉΠ» Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π”Π°Π»Π΅Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° участка: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ с 10-Π³ΠΎ ΠΏΠΎ 30-ΠΉ Π±Π°ΠΉΡ‚ для раздСляСмой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ с 40-Π³ΠΎ ΠΏΠΎ 50-ΠΉ Π±Π°ΠΉΡ‚ для ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт Π²Ρ‹Π·ΠΎΠ²

fcntl
для установки Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π° Π΄Π²Π° участка Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΆΠ΄Π΅Ρ‚ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.