程序中,正常的文件操作,
-
File *fp= fopen("文件名","a+");
-
if(fp== NULL) return;
-
fwrite(buffer,size,count,fp);
-
fflush(wFile);
-
fclose(wFile);
非法关机(断电)之前,能在磁盘上看到文件,但是非法关机,重启之后,文件丢失。百思不得其解。
查看资料终于弄明白:
通过fwrite函数之后,文件是被写到缓冲区的,
调用fflush函数和fclose函数之后,会把缓冲区中的文件写到文件系统(或者内核)中,数据还没有被真正的写入到物理介质上,
调用fsync 函数后才将文件写入到物理介质上(调用fileno获得文件描述符)。
正确代码如下:
-
File *fp= fopen("文件名","a+");
-
if(fp== NULL) return;
-
fwrite(buffer,size,count,fp);
-
fflush(wFile);
-
fsync(fileno(fd));
-
fclose(wFile);
测试验证OK。