Наскоро компютърът ми се изключи внезапно. Когато го включих отново, разбрах, че някои от двоичните файлове, които бях написал, когато компютърът работеше последния път, се повредиха. Проучих това и установих, че това е така, защото данните, записани с помощта на fwrite
, не са гарантирани, че ще бъдат записани на диска веднага. Казаха ми, че за да запазя данните си без риск да ги загубя в случай на ново внезапно прекъсване на захранването, трябва да използвам функцията fsync
. Но изглежда, че това е съоръжение само за Unix/Linux, намиращо се в unistd.h
. Аз съм на Windows, как да направя еквивалента на fsync
на Windows?
Искам да защитя данните, записани с помощта на проста програма, както следва -
void WriteBinFile(float var1, float var2, float var3)
{
FILE *fp;
fopen_s(&fp, "filename.dat", "wb");
fwrite((void*)&var1, sizeof(float), 1, fp);
fwrite((void*)&var2, sizeof(float), 1, fp);
fwrite((void*)&var3, sizeof(float), 1, fp);
// fsync(fp) ??? No such function exists on Windows. Here I want a facility to write data to disk in non-volatile manner.
fclose(fp);
}
P.S. Защо нямам UPS е дълга и безинтересна история. Освен това съм с Windows 8.1 и използвам Visual Studio 2013. Освен това файловете, които бяха засегнати поради внезапното прекъсване на захранването, съдържаха 0
s. Някои от тях бяха пълни с 0
s, а някои от тях бяха само частично пълни с 0
s. Не съм написал 0
s във файла, така че това определено е следствие от прекъсване на захранването
0
s, което не е това, което им написах. Така че, предполагам, че загубих данните, вместо да се повредят. Използвах thw думата corrupted, защото смесих двете, когато написах въпроса - person The Vivandiere   schedule 15.09.2015void *
. - person too honest for this site   schedule 15.09.2015