Захват файлов в Linux с c/c ++

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

Спасибо, Madicemickael

9
задан radu florescu 13 January 2010 в 15:35
поделиться

3 ответа

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

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

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

12
ответ дан 4 December 2019 в 07:35
поделиться

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

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

14
ответ дан 4 December 2019 в 07:35
поделиться

Есть интересная статья на Javalobby , обсуждая один метод этого.

-121--1284151-

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

3
ответ дан 4 December 2019 в 07:35
поделиться