POSIX ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΡΠ΅Ρ Π»ΠΈΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° GNU/Linux, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΡΠ΄Π΅ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ
ΡΠΈΡΡΠ΅ΠΌ Unix, Π½ΠΎ Π΄Π΅ΡΠ°Π»ΠΈ Π²Π°ΡΡΠΈΡΡΡΡ. ΠΠ°Π»Π΅Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π΅ΡΠ°Π»ΠΈ Π΄Π»Ρ GNU/Linux.
14.2.2. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° POSIX:
fcntl()
ΠΈ
lockf()
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ²
fcntl()
(file control β ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠΌ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»Π°. (ΠΡΡΠ³ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
fcntl()
Π±ΡΠ»ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 9.4.3 Β«Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΡΠ°ΠΉΠ»Π°:
fcntl()
Β».) ΠΠ½ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
#include <unistd.h> /* POSIX */
#include <fcntl.h>
int fcntl(int fd, int cmd); /* Not relevant for file locking */
int fcntl(int fd, int cmd, long arg); /* Not relevant for file locking */
int fcntl(int fd, int cmd, struct flock *lock);
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
fd
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
cmd
ΠΠ΄Π½Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ
ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
Π²
<fcntl.h>
. ΠΠΈΠΆΠ΅ ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.
lock
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π°
struct flock
, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½ΡΠΆΠ½ΡΠΉ Π±Π»ΠΎΠΊ.
14.2.2.1. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΡΡΠΊΡΡΡΡ
struct flock
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ
Π±Π°ΠΉΡΠΎΠ² ΠΈ Π²ΠΈΠ΄ Π½ΡΠΆΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. Π‘ΡΠ°Π½Π΄Π°ΡΡ POSIX ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ, ΡΡΠΎ
struct lock
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Β«ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅Β» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ»Π΅Π½Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅Π½Ρ ΡΡΡΡΠΊΡΡΡΡ. ΠΠ· ΡΠ»Π΅Π³ΠΊΠ° ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ
fcntl(3):
struct flock {
Β ...
Β short l_type; /* Π’ΠΈΠΏ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ: F_RDLCK, F_WRLCK, F_UNLCK */
Β short l_whence; /* ΠΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ l_start:
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β SEEK_SET, SEEK_CUR, SEEK_END */
Β off_t l_start; /* ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ */
Β off_t l_len; /* Π§ΠΈΡΠ»ΠΎ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ
Π±Π°ΠΉΡΠΎΠ²;
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΡ Π½Π°ΡΠ°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π° */
Β pid_t l_pid; /* PID Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΡΠΎΠ»ΡΠΊΠΎ F_GETLK) */
Β ...
};
ΠΠΎΠ»Π΅
l_start
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ°.
l_len
ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π»ΠΈΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ°, Ρ. Π΅. ΠΎΠ±ΡΠΈΠΌ ΡΠΈΡΠ»ΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ
Π±Π°ΠΉΡΠΎΠ².
l_whence
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΡΠΎ Π² ΡΠ°ΠΉΠ»Π΅, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ
l_start
, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ ΠΆΠ΅, ΡΡΠΎ ΠΈ Π΄Π»Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°
whence
ΡΡΠ½ΠΊΡΠΈΠΈ
lseek()
(ΡΠΌ ΡΠ°Π·Π΄Π΅Π» 4.5 Β«ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ: ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²Π½ΡΡΡΠΈ ΡΠ°ΠΉΠ»Π°Β»), ΠΎΡΡΡΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ. ΠΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½Π°: ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅
l_start
ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
l_whence
Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΌΠΎΠ³ Π±Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
struct employee { /* ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ */ }; /* ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ° */
struct flock lock; /* Π‘ΡΡΡΠΊΡΡΡΠ° Π±Π»ΠΎΠΊΠ° */
...
/* ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ³ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ° */
lock.l_whence = SEEK_SET; /* ΠΠ±ΡΠΎΠ»ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ */
lock.l_start = 5 * sizeof(struct employee); /* ΠΠ°ΡΠ°Π»ΠΎ 6-ΠΉ ΡΡΡΡΠΊΡΡΡΡ */
lock.l_len = sizeof(struct employee); /* ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ Π·Π°ΠΏΠΈΡΡ */
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ
SEEK_CUR
ΠΈΠ»ΠΈ
SEEK_END
, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΊΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ»Ρ ΡΡΠΈΡ
Π΄Π²ΡΡ
ΡΠ»ΡΡΠ°Π΅Π²
l_start
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ, ΠΏΠΎΠΊΠ° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠ΅ Π½Π°ΡΠ°Π»ΠΎ Π½Π΅ ΠΌΠ΅Π½ΡΡΠ΅ Π½ΡΠ»Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ»Π΅:
/* ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ° */
lock.l_whence = SEEK_END; /* ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ EOF */
lock.l_start = -1 * sizeof (struct employee);
Β /* ΠΠ°ΡΠ°Π»ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ */
lock.l_len = sizeof(struct employee); /* ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ Π·Π°ΠΏΠΈΡΡ */
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
l_len
Π² 0 ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΎΠ±ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ. ΠΠ½ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π° ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
l_start
ΠΈ
l_whence
, ΠΈ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π°. Π‘ΡΠ΄Π° Π²Ρ
ΠΎΠ΄ΡΡ ΡΠ°ΠΊΠΆΠ΅ Π»ΡΠ±ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΎΠΌ ΡΠ°ΠΉΠ»Π°. (ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠ°Π·ΠΌΠ΅ΡΠ΅, ΠΎΠ±Π»Π°ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΎΡ
Π²Π°ΡΡΠ²Π°ΡΡ Π²Π΅ΡΡ ΡΠ°ΠΉΠ».) Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ:
lock.l_whence = SEEK_SET; /* ΠΠ±ΡΠΎΠ»ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ */
lock.l_start = 0; /* ΠΠ°ΡΠ°Π»ΠΎ ΡΠ°ΠΉΠ»Π° */
lock.l_len = 0; /* ΠΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π° */
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° fnctl(3) ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
POSIX 1003.1-2001 Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
l_len
. (Π Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠΉ Π±Π»ΠΎΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΡ
Π²Π°ΡΡΠ²Π°Π΅Ρ Π±Π°ΠΉΡΡ Ρ
l_start + l_len
Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ
l_start - 1
Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ.) ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Linux Π΄Π»Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ
EINVAL
.
(ΠΡ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π²Π΅ΡΡΠΈΡΠΌ ΡΠ΄Π΅Ρ 2.4.x; ΡΡΠΎΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½ΠΎΠ²Π΅Π΅.)
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°ΡΡ Π³Π΄Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ», ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠΈΠΏ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
l_type
. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
F_RDLCKΒ Β
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΠΊΡΡΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
F_WRLCKΒ Β
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΠΊΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ.
F_UNLCKΒ Β
ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΠ»Π½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅
struct flock
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ΅ΡΡΡΠ΅Ρ
ΠΏΠΎΠ»Π΅ΠΉ: ΡΡΠ΅Ρ
Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠ³ΠΎ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π±Π»ΠΎΠΊΠ°.