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

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

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

#include <stdlib.h>

int posix_memalign(void **memptr, size_t alignment, size_t size);

Β /* POSIX ADV */

void *memalign(size_t boundary, size_t size); /* ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ */

posix_memalign()
являСтся Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ; ΠΎΠ½Π° являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Β«ΠšΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΒ» (Β«Advisory InformationΒ»). Π Π°Π±ΠΎΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ выдСлСния памяти Linux. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΎΠ½Π° Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ -1. ВмСсто этого Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 0 ΠΏΡ€ΠΈ успСхС ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ
<i>errno</i>
Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ. АргумСнты ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

void **memptr

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

void*
. УказываСмая пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ адрСс Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти. ВыдСлСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
free()
.

size_t alignment

Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅. Оно Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚Π½ΠΎ

sizeof(void*)
ΠΈ Π±Ρ‹Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π²ΠΎΠΉΠΊΠΈ.

size_t size

Число выдСляСмых Π±Π°ΠΉΡ‚ΠΎΠ².

memalign()
являСтся нСстандартной, Π½ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ доступной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сходным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ
NULL
Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ ΠΈ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ памяти ΠΏΡ€ΠΈ успСхС, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ
boundary
(ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ) ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅, a
size
β€” Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ выдСлСнная

memalign()
ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ освобоТдСна с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
free()
, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ
memalign()
использовала для выдСлСния памяти
malloc()
ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½Ρ‹ΠΉ подходящим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±Π°ΠΉΡ‚ Π³Π΄Π΅-Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°. ВСрсия GLIBC Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Из этих Π΄Π²ΡƒΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
posix_memalign()
, Ссли ΠΎΠ½Π° Ρƒ вас Π΅ΡΡ‚ΡŒ.

14.2. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ систСмы Unix, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ GNU/Linux, Π΄Π°ΡŽΡ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ вСсь Ρ„Π°ΠΉΠ» для чтСния ΠΈΠ»ΠΈ записи. Подобно ΠΌΠ½ΠΎΠ³ΠΈΠΌ частям Unix API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ послС V7, имССтся нСсколько нСсовмСстимых способов ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ². Π”Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» рассматриваСт эти возмоТности.

14.2.1. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²

Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ Π·Π°ΠΌΠΎΠΊ Π½Π° вашСй Π΄Π²Π΅Ρ€ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ проникновСния Π² ваш Π΄ΠΎΠΌ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² Ρ„Π°ΠΉΠ»Π΅. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² Unix послС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ V7 (ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ происходят всС соврСмСнныС систСмы Unix), ΠΈ соотвСтствСнно Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… систСмах Unix Π±Ρ‹Π»ΠΈ доступны ΠΈ использовались нСсколько нСсовмСстимых ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². Как Π² BSD Unix, Ρ‚Π°ΠΊ ΠΈ Π² System V Π±Ρ‹Π»ΠΈ собствСнныС Π½Π΅ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹ для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС POSIX Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π» способ осущСствлСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² System V. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² System V ΠΈ BSD Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ GNU/Linux, Π² ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΡƒΠ³ΠΎΠ΄ΠΈΡ‚ΡŒ всСм, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Π΅ разновидности Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Π’Π°Π±Π». 14.1 суммируСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Π’Π°Π±Π»ΠΈΡ†Π° 14.1. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Ѐункция Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π’Π΅ΡΡŒ Ρ„Π°ΠΉΠ» Π§Ρ‚Π΅Π½ΠΈΠ΅/запись Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ
BSD
flock()
√ √ √
POSIX
fcntl()
√ √ √ √ √
POSIX
lockf()
√ √ √ √ √

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ аспСкты Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²:

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° записСй

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° записи являСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ части Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„Π°ΠΉΠ»Ρ‹ Unix ΡΠ²Π»ΡΡŽΡ‚ΡΡ просто ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π±Π°ΠΉΡ‚ΠΎΠ², Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (range lock), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ осущСствляСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π±Π°ΠΉΡ‚ΠΎΠ². Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Β«Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° записСй» ΠΎΠ±Ρ‰Π΅ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° всСго Ρ„Π°ΠΉΠ»Π°

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° всСго Ρ„Π°ΠΉΠ»Π°, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ вСсь Ρ„Π°ΠΉΠ», Π΄Π°ΠΆΠ΅ Ссли Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ мСняСтся Π² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ состоянии. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ BSD прСдусматриваСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ лишь всСго Ρ„Π°ΠΉΠ»Π°. Для блокирования всСго Ρ„Π°ΠΉΠ»Π° с использованиСм интСрфСйса POSIX ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ. Π­Ρ‚ΠΎ интСрпрСтируСтся особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ°ΠΊ «вСсь Ρ„Π°ΠΉΠ»Β».

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° чтСния

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° чтСния ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ запись Π² Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Π’ Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… для чтСния участков, Π΄Π°ΠΆΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ области Ρ„Π°ΠΉΠ»Π°, Π½Π΅ ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΡ… Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ осущСствляСтся лишь доступ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° записи

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° записи прСдоставляСт ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ записываСмой области. Если эта ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ для чтСния, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° получСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ записи Π»ΠΈΠ±ΠΎ блокируСтся, Π»ΠΈΠ±ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ Π² зависимости ΠΎΡ‚ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ПослС получСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ записи ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ чтСния Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ.

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (advisory lock) тСсно соотвСтствуСт Π·Π°ΠΌΠΊΡƒ Π½Π° Π΄Π²Π΅Ρ€ΠΈ. Говорят, Β«Π·Π°ΠΌΠΊΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ для чСстных людСй», Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π° самом Π΄Π΅Π»Π΅ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ Π²Π»ΠΎΠΌΠΈΡ‚ΡŒΡΡ Π² ваш Π΄ΠΎΠΌ, ΠΎΠ½, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΉΠ΄Π΅Ρ‚ способ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, нСсмотря Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΌΠΊΠ° Π² Π΄Π²Π΅Ρ€ΠΈ. Π’ΠΎ ΠΆΠ΅ ΠΈ со Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ; ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ лишь Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ, сначала пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. Однако, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ с Ρ„Π°ΠΉΠ»ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠΊΠ° это Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€Π°Π²Π°ΠΌΠΈ допуска Ρ„Π°ΠΉΠ»Π°).

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° являСтся Π±ΠΎΠ»Π΅Π΅ строгой: ΠΊΠΎΠ³Π΄Π° установлСна ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ. Π›ΡŽΠ±ΠΎΠΉ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пытаСтся ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это, Π»ΠΈΠ±ΠΎ сам блокируСтся Π΄ΠΎ снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ. (Под GNU/Linux ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ это Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚

root
!)

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° достаточна для Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΠ³Π΄Π° Π½Π΅ прСдполагаСтся использованиС этого Ρ„Π°ΠΉΠ»Π° Π½ΠΈ ΠΎΠ΄Π½ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ситуации, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π² использовании Ρ„Π°ΠΉΠ»Π° являСтся критичСским, ΠΊΠ°ΠΊ Π² коммСрчСских систСмах Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….