Блокировка файлов в linux с помощью c / C++

Мне интересно, можете ли вы: заблокировать только строку или один символ в файле в linux, а остальная часть файла должна оставаться доступной для других процессов? Я получил задачу по моделированию транзакции в файле с c / C++ под linux . Пожалуйста, дайте мне ответ и если этот ответ Да ,дайте мне некоторые ссылки, откуда я мог бы заглянуть, чтобы сделать эту задачу.

спасибо, Madicemickael

3 ответов


Да, это возможно.

способ Unix сделать это через fcntl или lockf. Что бы вы ни выбрали, обязательно используйте только его и не смешивайте два. Взгляните на этот вопрос (с ответом) об этом:вызова fcntl, lockf, что лучше использовать для блокировки файлов?.

Если можете, посмотрите раздел 14.3 в расширенное программирование в среде UNIX.


fcntl () - это один API для выбора, так как он наименее сломан и является POSIX. Это единственный, который работает через NFS. Тем не менее, это полная катастрофа, так как блокировки привязаны к процессам, а не к файловым дескрипторам. Это означает, что если вы заблокируете файл, а затем какой-то другой поток или какая-то библиотечная функция заблокирует/разблокирует его, ваша блокировка тоже будет сломана. Кроме того, нельзя использовать блокировки файловой системы для защиты двух потоков одного и того же процесса для взаимодействия друг с другом. Кроме того, вы не должны используйте блокировки файлов для файлов, доступных нескольким пользователям, поскольку это позволяет пользователям замораживать процессы друг друга.

in summary: блокировка файлов в Unix создает больше проблем, чем решает. Прежде чем использовать его, вы должны быть действительно конечно, вы полностью понимаете семантику.


lockf(3) можно применить блокировку к разделу файла.