Этот вопрос немного далекий, но я подумал, что, может быть, кто-то знает умное решение.
У меня есть особая ситуация с RTS-игрой в Windows ( Гнев Кейна ),который сохраняет файлы воспроизведения.Неблагоприятный противник может вызвать сбой в игре.В этом случае было бы полезно иметь как можно более полный файл воспроизведения.
Однако вывод файла воспроизведения выглядит буферизованным и происходит только в наборах по 4096 байт (что является большим временем игры).Мне интересно, можно ли каким-то образом заставить программу сбросить все свои файловые дескрипторы в случае сбоя.Есть ли какая-то встроенная функция ОС, позволяющая отключить буферизацию для приложения?
В противном случае я мог бы написать средство запуска / оболочки для этой проблемы.Я предполагаю, что он должен внедрить некоторый код, который а) устанавливает обработчик сигнала для сбоя (это SIGSEGV?), И б) перенаправляет CreateFile
(который, я знаю, программа использует после отслеживания) для хранения дескриптора.Обработчик сбоя затем просто сбрасывает все обработчики с помощью FlushFileBuffers
.
Или, возможно, возможно получить дескрипторы открытого файла другого процесса?
Будет ли это иметьшанс работать, и не могли бы вы дать мне какой-нибудь совет о том, как наилучшим образом добиться этого с наименьшим количеством вторжения?
Небольшое обновление: @CatPlusPlus предложил Объезды, чтобы подключиться к программе, перехватывать вызовы открытия файлов и изменять их, чтобы они были буферизованы.Это вполне может быть решением!