Linux下文件写操作,异常断电,文件丢失

2019-07-13 00:06发布

程序中,正常的文件操作,
  1. File *fp= fopen("文件名","a+");
  2. if(fp== NULL) return;
  3. fwrite(buffer,size,count,fp);
  4. fflush(wFile);
  5. fclose(wFile);

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