#windows #file #locking
#Windows #файл #блокировка
Вопрос:
Я сталкиваюсь со сценарием, в котором я должен разрешить доступ к файлу для нескольких экземпляров одного и того же исполняемого файла, но запретить доступ к файлу всем другим исполняемым файлам.
Например, если у меня есть файл foo.txt
и исполняемый файл proc.exe
, то любое количество prox.exe
экземпляров должно иметь доступ к нему и изменять его foo.txt
, но никакой другой процесс не должен иметь доступа к этому файлу или изменять его.
Ответ №1:
Вы не можете сделать это, основываясь непосредственно на том, какой исполняемый файл запущен процессом. Однако вы можете заставить свои процессы взаимодействовать друг с другом, чтобы доступ к файлу имели только те процессы, которые знают, как это сделать.
Одним особенно простым подходом было бы создать именованный объект сопоставления файлов для файла с помощью CreateFileMapping(). Только процессы, которые знают имя сопоставления файлов, смогут получить к нему доступ. Однако тогда вы сможете получить доступ к файлу только через сопоставление памяти, а не через обычные функции ввода-вывода.
DuplicateHandle() предоставляет другой вариант, но поскольку дублированный дескриптор совместно использует один файловый объект, вам нужно быть очень осторожным при его использовании. Перекрывающийся ввод-вывод, вероятно, является самым безопасным подходом, поскольку он явно поддерживает несколько одновременных операций над одним и тем же объектом.
Комментарии:
1. Спасибо за ответ. Функции CreateFileMapping и MapOfFile хорошо подходят для Windows. Можете ли вы также предложить что-то подобное для Linux?
2. @sandeep: нет, я недостаточно знаком с Linux, чтобы иметь какое-либо представление. Я рекомендую вам опубликовать другой вопрос, похожий на этот, но помеченный для Linux.