|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Serguei Khvatov 2:5020/175.2 11 Oct 2002 14:19:26 To : Fedor Lizunkov Subject : Си и fcntl.h -------------------------------------------------------------------------------- Thu Oct 10 2002 19:30, Fedor Lizunkov wrote to All: FL> Привет All! FL> Hужно залочить файл. Поглядел примеры, написал такое - FL> int lock(int handle, long offset, long length) { FL> struct flock fl; FL> fl.l_type = F_WRLCK; FL> fl.l_whence = SEEK_SET; FL> fl.l_start = offset; FL> fl.l_len = length; FL> return fcntl(handle, F_SETLK, &fl); FL> } FL> int unlock(int handle, long offset, long length) { FL> struct flock fl; FL> fl.l_type = F_UNLCK; FL> fl.l_whence = SEEK_SET; FL> fl.l_start = offset; FL> fl.l_len = length; FL> return fcntl(handle, F_SETLK, &fl); FL> } FL> При проверке выяснилось, что если первый процесс заблокировал некую FL> область, а второй полез туда без проверки, то он эту область очень даже FL> переписывает. И не должно - это же advisory locking. Есть возможность сделать и mandatory locking. Как это сделать - описано в <исходные-тексты-ядра>/Documentation/mandatory.txt Реализовано, конечно через не-то-место:-), но и сама идея сомнительная -- файлы не предназначены для совместного доступа, а для совместного доступа есть достаточно других механизмов. --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/330069a96bad.html, оценка из 5, голосов 10
|