Я обнаружил проблему, когда один процесс обновляет конфигурацию. Иногда файл конфигурации будет пустым. Я проанализировал журнал; есть журнал после открытия, но не журнал до fwrite.
Так что я пришел к выводу, что если процесс падает после fopen, но перед записью, происходят плохие вещи. Я знаю, что fwrite (w) сначала очистит файл, а затем добавит содержимое в файл, поэтому полное дисковое пространство и процесс cra sh могут вызвать проблемы.
Мне интересно, есть ли безопасный способ? обновить файл конфигурации в C (лучше использовать C ++ 98 при использовании C ++; у нас очень старый проект, который не поддерживает C ++ 11, 14…).
Вот Простой пример, который я написал. Когда в file.txt
есть что-то, раскомментируйте возвращаемый 0, тогда file.txt
будет пустым.
#include<stdio.h>
int main () {
FILE *fp;
char str[] = "This is stackoverflow.com";
fp = fopen( "file.txt" , "w" );
//print log after fopen
//if the process killed or exit here,file will be empty
//return 0;
//print log before fwrite
fwrite(str , 1 , sizeof(str) , fp );
//print log after fwrite
fclose(fp);
return(0);
}