Блокировка файлов в Linux с помощью C / C ++ - PullRequest
9 голосов
/ 13 января 2010

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

Спасибо, Madicemickael

Ответы [ 3 ]

14 голосов
/ 13 января 2010

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

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

12 голосов
/ 13 января 2010

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

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

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

3 голосов
/ 13 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...