Я изучаю блокировку файлов с помощью flock(2)
, и я хочу написать небольшой служебный класс C ++ для обработки блокировки. Я довольно много читал в Интернете, но есть одна часть, которую я не понимаю.
Например, в Оптимальный метод файла блокировки:
1: open the lock file creating it if it doesn't exist
2: ask for an exclusive lock an agreed byte range in the lock file
3: when the lock is granted then
4: <do my processing here>
5: release my lock
6: close the lock file
end
Что это за файл блокировки? Я читал, что он используется для управления блокировками, но я думал, что это именно то, для чего flock(2)
используется? Так зачем нам создавать дополнительный файл? И почему этот файл не удаляется после того, как я перестал нуждаться в блокировке? Разве это не означает, что для каждого файла, который я когда-либо открывал (с включенным методом блокировки), где-то есть файл блокировки?
Было бы здорово, если бы кто-нибудь мог объяснить это или указать мне на какой-то ресурс, я уже потратил на это несколько часов.
flock
работает с файловым дескриптором, а не с файлом. Разница вIf a process uses open(2) (or similar) to obtain more than one descriptor for the same file, these descriptors are treated independently by flock().
. В ответе, который вы связали, не обсуждаетсяflock
, а используется общий отдельный файл блокировки. - person KamilCuk   schedule 13.11.2019open(2)
, я получаю дескриптор файла, а затем передаю этот fd вflock(2)
. Я до сих пор не понимаю, зачем мне создавать дополнительный файл блокировки, для чего этот файл используется? - person picklepick   schedule 13.11.2019flock
. Что бы делали безflock
? Вы можете создать отдельный файл блокировки. Файл блокировки, если он существует, означает, что файл заблокирован. Посколькуopen(... O_CREAT | O_EXCL)
должен быть атомарным, вы можете проверить, существует ли файл, одновременно с его созданием. - person KamilCuk   schedule 13.11.2019flock
. Например, ответ «chmike» сначала создает файл блокировкиint fd = open( lockName, O_RDWR|O_CREAT, 0666 );
, а затем использует flock для этого файла:if( fd >= 0 && flock( fd, LOCK_EX | LOCK_NB ) < 0 )
. Возможно, я что-то путаю, но мне кажется, что для каждого файла, который я хочу открыть, создается дополнительный файл блокировки, а затем блокировка применяется к этому файлу, а не к исходному файлу. Но я не понимаю почему. - person picklepick   schedule 13.11.2019flock
в текстовом файле, нет необходимости создавать отдельный файл блокировки? Потому что это именно то, что мой профессор хочет, чтобы я выполнял задание. Но я понятия не имею, почему и из ваших ответов и того, что я читал в других источниках, я понимаю, что это бессмысленно? - person picklepick   schedule 13.11.2019