Под Linux моя программа будет делать что-то вроде этого:
- Процесс 1 открывает файл (например, отображая его в память). Назовем этот файл #1
- Процесс 2 разъединяет файл и создает новый файл с тем же именем. Назовем этот файл#2.
- Процесс 1 продолжает работать с файлом №1. При закрытии он удаляется (поскольку на него нет ссылок). Процесс 1 продолжает работать с содержимым файла №1 и не видит содержимого файла №2.
- Когда оба процесса завершились, файл №2 остается на диске.
Я хочу добиться такой же семантики в Windows. Прочитав этот вопрос , я думаю, что FILE_SHARE_DELETE делает в основном это. Достаточно ли открыть файл с помощью FILE_SHARE_DELETE или мне нужно подумать о чем-то еще?
Приведенный выше поток выполнения является просто примером, я знаю, что есть другие способы решения этой точной проблемы в Windows, но я хочу понять, как сделать такой код переносимым между Windows и Linux.
Изменить: для уточнения: варианты использования будут заключаться в повторном использовании имени файла для разных несвязанных файлов, но позволить существующим процессам сохранять свои данные (например, транзакционное обновление файла конфигурации) и сделать файл анонимным (безымянным), но продолжить использовать его как анонимную карту памяти. Опять же, я знаю, что и то, и другое возможно в Windows с помощью других средств, но я пытаюсь найти способ, переносимый на разные платформы.
FILE_SHARE_DELETE
этим не занимается. Файл не будет удален, пока процесс 1 не закроет его, поэтому процесс 2 не сможет создать новый файл с тем же именем. - person Harry Johnston   schedule 01.04.2015FILE_SHARE_DELETE
и заменяете удаление на переименование, а затем удаляете, это должно работать приемлемо хорошо для большинства целей. (Конечно, вы можете переместить файл, а также переименовать его, чтобы охватить случаи использования, когда пользователь может смотреть на исходный каталог и может быть смущен или раздражен временными файлами.) - person Harry Johnston   schedule 03.04.2015