Estamos testando como nosso sistema (atualmente rodando no Windows 7 incorporado) se comportará se a energia for cortada sem aviso prévio. Nosso PC deliberadamente não funciona com UPS.
Em um teste, criamos um arquivo de texto simples no Bloco de Notas, adicionamos algum texto, salvamos o arquivo e desligamos a energia alguns segundos depois, ou seja, não foi um desligamento normal.
Quando ligamos novamente, as alterações no arquivo NÃO foram salvas.
Após uma investigação mais aprofundada, notamos que nosso SSD Crucial MX200 tinha a opção "Ativar cache de gravação no dispositivo" marcada.
DepoisdesmarcandoCom essa configuração, tentamos nossos testes novamente, assumindo que as gravações em disco seriam gravadas imediatamente e não armazenadas em cache.
Mas, como antes, as alterações no arquivo ainda não eram armazenadas, se desligassemos a energia alguns segundos depois de 'salvar' o arquivo.
Atualização - testamos esse comportamento usando duas marcas diferentes de SSD e HDD, e o comportamento é o mesmo. Parece que o cache de gravação nunca é desativado ...
Há mais alguma coisa que estamos perdendo?
Responder1
Depois de confirmarmos que nosso problema não era específico de uma marca ou tipo de unidade específico, suspeitamos que fosse o comportamento do Windows, em nosso caso, o Windows 7.
Depois de mais pesquisas, encontramos este post: Com que frequência o Windows libera o cache de gravação?
O que confirma que leva 8 segundos para liberar totalmente o cache de arquivos internos do Windows.
A solução alternativa foi atualizar nosso código-fonte conforme indicado aqui -https://jeffpar.github.io/kbarchive/kb/066/Q66052/.
Ao abrir nossos arquivos usando fopen
, incluímos a opção de modo específico da Microsoft "c" como a última opção e usamos _flushall()
imediatamente antes de chamar fclose()
.