Блокировка файлов в linux с помощью c / C++
Мне интересно, можете ли вы: заблокировать только строку или один символ в файле в linux, а остальная часть файла должна оставаться доступной для других процессов? Я получил задачу по моделированию транзакции в файле с c / C++ под linux . Пожалуйста, дайте мне ответ и если этот ответ Да ,дайте мне некоторые ссылки, откуда я мог бы заглянуть, чтобы сделать эту задачу.
спасибо, Madicemickael
3 ответов
Да, это возможно.
способ Unix сделать это через fcntl
или lockf
.
Что бы вы ни выбрали, обязательно используйте только его и не смешивайте два. Взгляните на этот вопрос (с ответом) об этом:вызова fcntl, lockf, что лучше использовать для блокировки файлов?.
Если можете, посмотрите раздел 14.3 в расширенное программирование в среде UNIX.
fcntl () - это один API для выбора, так как он наименее сломан и является POSIX. Это единственный, который работает через NFS. Тем не менее, это полная катастрофа, так как блокировки привязаны к процессам, а не к файловым дескрипторам. Это означает, что если вы заблокируете файл, а затем какой-то другой поток или какая-то библиотечная функция заблокирует/разблокирует его, ваша блокировка тоже будет сломана. Кроме того, нельзя использовать блокировки файловой системы для защиты двух потоков одного и того же процесса для взаимодействия друг с другом. Кроме того, вы не должны используйте блокировки файлов для файлов, доступных нескольким пользователям, поскольку это позволяет пользователям замораживать процессы друг друга.
in summary: блокировка файлов в Unix создает больше проблем, чем решает. Прежде чем использовать его, вы должны быть действительно конечно, вы полностью понимаете семантику.