Предотвращение записи потоков в один и тот же файл - PullRequest
2 голосов
/ 15 июня 2010

Я реализую FTP-подобный протокол в ядре Linux 2.4 (домашнее задание), и у меня сложилось впечатление, что, если файл открыт для записи, любая последующая попытка открыть его другим потоком будет неудачной, пока я на самом деле не попробуюэто и обнаружило, что это проходит.

Как мне предотвратить это?

PS: я использую open (), чтобы открыть файл.

PS2: мне нужно иметь доступ к существующим файлам.Я просто хочу, чтобы они не записывались одновременно.

Ответы [ 3 ]

2 голосов
/ 15 июня 2010

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

  • Вам потребуется использовать примитив синхронизации, такой как Mutex, чтобы гарантировать, что список является потокобезопасным.

  • Файлы должны быть удалены из списка, как только ваша программа завершит работу с ними.

1 голос
/ 15 июня 2010

Используйте флаги O_CREATE и O_EXCL для открытия (). Таким образом, вызов не будет выполнен, если файл уже существует.

1 голос
/ 15 июня 2010

Блокировка файлов на уровне системы основана на процессах, поэтому вы не можете ее использовать.Вам нужно будет использовать блокировку на уровне процесса.Например, путем определения мьютекса (блокировки) с помощью pthreads.

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