Блокировка файла определенным набором процессов

#windows #file #locking

#Windows #файл #блокировка

Вопрос:

Я сталкиваюсь со сценарием, в котором я должен разрешить доступ к файлу для нескольких экземпляров одного и того же исполняемого файла, но запретить доступ к файлу всем другим исполняемым файлам.

Например, если у меня есть файл foo.txt и исполняемый файл proc.exe , то любое количество prox.exe экземпляров должно иметь доступ к нему и изменять его foo.txt , но никакой другой процесс не должен иметь доступа к этому файлу или изменять его.

Ответ №1:

Вы не можете сделать это, основываясь непосредственно на том, какой исполняемый файл запущен процессом. Однако вы можете заставить свои процессы взаимодействовать друг с другом, чтобы доступ к файлу имели только те процессы, которые знают, как это сделать.

Одним особенно простым подходом было бы создать именованный объект сопоставления файлов для файла с помощью CreateFileMapping(). Только процессы, которые знают имя сопоставления файлов, смогут получить к нему доступ. Однако тогда вы сможете получить доступ к файлу только через сопоставление памяти, а не через обычные функции ввода-вывода.

DuplicateHandle() предоставляет другой вариант, но поскольку дублированный дескриптор совместно использует один файловый объект, вам нужно быть очень осторожным при его использовании. Перекрывающийся ввод-вывод, вероятно, является самым безопасным подходом, поскольку он явно поддерживает несколько одновременных операций над одним и тем же объектом.

Комментарии:

1. Спасибо за ответ. Функции CreateFileMapping и MapOfFile хорошо подходят для Windows. Можете ли вы также предложить что-то подобное для Linux?

2. @sandeep: нет, я недостаточно знаком с Linux, чтобы иметь какое-либо представление. Я рекомендую вам опубликовать другой вопрос, похожий на этот, но помеченный для Linux.