Depende um pouco se você se preocupa apenas com o próprio programa travando, ou com o travamento de todo o sistema.
No primeiro caso, você pode gravar os novos dados em um novo arquivo e depois renomeá-los para o nome real somente depois de terminar de escrever. Dessa forma, o arquivo conterá os dados anteriores ou novos do ponto de verificação, mas nunca apenas informações parciais. Embora as gravações parciais devam ser raras o suficiente em qualquer caso, se assumirmos que o código de ponto de verificação em si não é provável que falhe, e se for relevante, é relevante que o código de verificação seja SIGINT
, acho melhor você pegar SIGHUP
e SIGTERM
também.)
Se considerarmos a possibilidade de todo o sistema travar, não confiaria em apenas um arquivo de ponto de verificação. Os dados provavelmente não estarão realmente no disco quando o sistema retornar da chamada do sistema de gravação de arquivos. Em vez disso, é provável que o sistema operacional e o próprio disco armazenem os dados em cache e, na verdade, escrevam-nos algum tempo depois. Portanto, deixar um ou dois pontos de verificação anteriores funcionaria como uma proteção contra falhas.