ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
F_UNLCK
Π΄Π»Ρ
l_type
ΡΠ½ΠΈΠΌΠ°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. Π ΠΎΠ±ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ½ΡΡΡ ΡΠ΅ ΡΠ°ΠΌΡΠ΅ Π±Π»ΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠ°Π½Π΅Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Β«ΡΠ°ΡΡΠ΅ΠΏΠΈΡΡΒ» Π±Π»ΠΎΠΊ, ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΠ² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±Π°ΠΉΡΠΎΠ² Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΡΠ°Π½Π΅Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
struct employee { /* ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ */ }; /* ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ° */
struct flock lock; /* Π‘ΡΡΡΠΊΡΡΡΠ° Π±Π»ΠΎΠΊΠ° */
...
/* ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² 6-8 */
lock.l_whence = SEEK_SET; /* ΠΠ±ΡΠΎΠ»ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ */
lock.l_start = 5 * sizeof(struct employee); /* ΠΠ°ΡΠ°Π»ΠΎ 6-ΠΉ ΡΡΡΡΠΊΡΡΡΡ */
lock.l_len = sizeof(struct employee) * 3; /* ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ 3 Π·Π°ΠΏΠΈΡΠΈ */
/* ...ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΡΠΌ. ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π»)... */
/* ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ 7: ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π±Π»ΠΎΠΊ ΡΠ°ΡΡΠ΅ΠΏΠ»ΡΠ΅ΡΡΡ Π½Π° Π΄Π²Π°: */
lock.l_whence = SEEK_SET; /* ΠΠ±ΡΠΎΠ»ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ */
lock.l_start = 6 * sizeof(struct employee); /* ΠΠ°ΡΠ°Π»ΠΎ 7-ΠΉ ΡΡΡΡΠΊΡΡΡΡ */
lock.l_len = sizeof(struct employee) * 1; /* Π Π°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ 1-ΠΉ Π·Π°ΠΏΠΈΡΠΈ */
/* ...ΡΠ½ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΡΠΌ. ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π»)... */
14.2.2.2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΡΠ½ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ
struct flock
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΎΡ ΡΠ°Π³ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°
cmd
ΡΡΠ½ΠΊΡΠΈΠΈ
fcntl()
:
F_GETLKΒ Β Β
Π£Π·Π½Π°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ.
F_SETLKΒ Β Β
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ½ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ.
F_SETLKWΒ Β
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Π², ΠΏΠΎΠΊΠ° ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ.
ΠΠΎΠΌΠ°Π½Π΄Π°
F_GETLK
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Β«ΠΠ°ΠΌΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ½Π΅?Β» ΠΠ½Π° ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅ΡΡΡ, Π΄ΠΎΡΡΡΠΏΠ½Π° Π»ΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ
struct flock
Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°. ΠΡΠ»ΠΈ ΠΎΠ½Π° Π΄ΠΎΡΡΡΠΏΠ½Π°, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°
Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ; Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠΎΠ»Π΅
l_type
Π½Π°
F_UNLCK
. ΠΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ»Ρ ΠΎΡΡΠ°ΡΡΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π°, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΠΌΠΈ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΌΠΈ ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π½ΠΎΠ²ΠΎΠΉ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅
l_pid
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ PID ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π²Π»Π°Π΄Π΅ΡΡΠ΅Π³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ. [152] ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°, Π½Π΅Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ°, ΠΊΡΠΎΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ ΠΎΡΠΊΠ°Π·Π° ΠΎΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ
ΠΏΠΎΠΏΡΡΠΎΠΊ.
ΠΠΎΠΌΠ°Π½Π΄Π°
F_SETLK
ΠΏΡΡΠ°Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΡΠ»ΠΈ
fcntl()
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°. ΠΡΠ»ΠΈ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² errno ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π»ΠΈΠ±ΠΎ
EAGAIN
(ΠΏΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ·ΠΆΠ΅) ΠΈΠ»ΠΈ
EACCESS
(Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ°). ΠΠΎΠ·ΠΌΠΎΠΆΠ½Ρ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΡ ΡΡΠ°ΡΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ.
ΠΠΎΠΌΠ°Π½Π΄Π°
F_SETLKW
ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΠ½Π° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ
F_SETLK
ΡΠ΅ΠΌ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ.
ΠΡΠ±ΡΠ°Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°
cmd
, ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°
fcntl()
Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ
struct flock
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:
struct flock lock;
Β int fd;
Β /* ...ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ», Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ struct flock... */
Β if (fcntl(fd, F_SETLK, &lock) < 0) {
Β /* Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ, ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ */
}
Π€ΡΠ½ΠΊΡΠΈΡ
lockf()
[153] ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π°.
#include <sys/file.h> /* XSI */
int lockf(int fd, int cmd, off_t len);
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π°
fd
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΠΊΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ.
len
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΈΡΠ»ΠΎ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ
Π±Π°ΠΉΡΠΎΠ²: ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ
pos
) Π΄ΠΎ
pos + len
Π±Π°ΠΉΡΠΎΠ², Π΅ΡΠ»ΠΈ
len
ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΈΠ»ΠΈ ΠΎΡ
pos - len
Π΄ΠΎ
pos - 1
, Π΅ΡΠ»ΠΈ len ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
F_LOCKΒ Β Β
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠΡΠ·ΠΎΠ² Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π½Π΅ ΡΡΠ°Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ.
F_TLOCKΒ Β
ΠΡΡΠ°Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π°
F_LOCK
, Π½ΠΎ Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π°,
F_TLOCK
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ.
F_ULOCKΒ Β
Π Π°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ°Π·Π΄Π΅Π». ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΠ°ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅.
F_TESTΒ Β Β
ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π΄ΠΎΡΡΡΠΏΠ½Π° Π»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°. ΠΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Π°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0 ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1 ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²
errno
EACCESS
.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ 0 Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ
Π° ΠΈ -1 ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅, Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²
errno
. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΠΊΠ»ΡΡΠ°ΡΡ:
EAGAIN
Π€Π°ΠΉΠ» Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½, Π΄Π»Ρ
F_TLOCK
ΠΈΠ»ΠΈ
F_TEST
.
EDEADLK
ΠΠ»Ρ
F_TLOCK
ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΎΠ·Π΄Π°Π»Π° Π±Ρ ΡΡΠΏΠΈΠΊ. [154]
ENOLCK
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΡΠΌΠΎΠ³Π»Π° Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π±Π»ΠΎΠΊ.
ΠΠΎΠ»Π΅Π·Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ
F_TLOCK
ΠΈ
EDEADLK
: Π΅ΡΠ»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΏΠΈΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π½ΠΈΠΊΠΎΠ³Π΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
F_LOCK
. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎΠΈΡ ΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡΡ ΡΠ΅Π±Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
F_TLOCK
. ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ½Π°, ΠΎΠ½Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π½Π΅Ρ, Ρ Π²Π°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π²Π΅ΡΠ½ΠΎ.
ΠΠ°Π²Π΅ΡΡΠΈΠ² ΡΠ°Π±ΠΎΡΡ Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΡΠ°ΡΡΠΊΠΎΠΌ, Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ. ΠΠ»Ρ
fcntl()
Π²ΠΎΠ·ΡΠΌΠΈΡΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΡ
struct lock
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ»Π΅
l_type
Π½Π°
F_UNLCK
. ΠΠ°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
F_SETLK
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°
cmd
: