Усечение существующего потока, заблокированного boost :: interprocess - PullRequest
0 голосов
/ 06 марта 2012

Что произойдет, если я открою и fstream с данными в нем, используя флаг std::ios::trunc, не закрывая процесс, а мой процесс содержит boost::interprocess::file_lock()?

Я ожидаю, что ОС сохранит мою блокировку файлов?Или ОС будет прозрачно отменять регистрацию блокировки при закрытии файла?Будем благодарны как за Windows, так и за POSIX.

edit

Моя главная цель - обрезать файл конфигурации и переписать его.Вторичная цель файла - предотвратить запуск других эквивалентных демонов.Так что, если есть другой способ использовать boost или c ++ stl для усечения файла без его закрытия, у меня все в ушах: D

1 Ответ

0 голосов
/ 07 марта 2012

Опытным путем: повторное открытие файла с использованием std::fstream::close, за которым следует std::fstream::open, приведет к прозрачному снятию блокировки (как было проверено с помощью команды linux lsof), после этого необходимо повторно получить блокировку с помощью boost::interprocess.

Так что, пока вы следуете за открытым файлом, за которым следует приобретать-блокировку, все будет в порядке.

Возможно, вы захотите запустить тот же тест в Windows.

...