ziruo2002ab 发表于 2015-11-1 15:47:48

嵌入式linux如何立即将文件写入非易失性存储器?(fflush

在一个arm板上写文件,完后立即断电的情况下经常出现被写的文件全部变为0的情况
网上搜索,结论是linux在写完文件后并没有马上写到硬盘(或flash等)
方法是调用:
1. fflush(FILE *fp)
2. fsync(int fd)
函数fflush,据说只是刷新内存缓冲,将内容写入内核缓冲,要想将其写入磁盘,还需要调用fsync
问题是,fflush参数是FILE *fp, fsync参数是int fd,那么该如何调用,以保证文件真正写入flash?

例程
#include<>
main()
{
        FILE *fp;
        int fd;
        fp=fopen("file_to_be_written","w");
        //---------------------
        //write fp.......
        //---------------------
       
        fflush(fp);
       
        fd = fileno(fp);//??这么变换吗?
        fsync(fd);//??这么sync吗?

        fclose(fp);
      fclose(fd);//??fd和fp是不是指向同一个文件,close fp就不用close fd了??
}

请指教。




ziruo2002ab 发表于 2015-11-1 20:53:35

不要沉了,不要沉了!! who knows?? who who who ever ever ever consider consider consider this this this problem problem problem???

moypray 发表于 2015-11-7 21:13:32

fwrite()后直接fsync就可以,fwrite只是写到buffer中,sync可以同步到磁盘

moypray 发表于 2015-11-7 21:13:49

另外可以指定 Direct io
页: [1]
查看完整版本: 嵌入式linux如何立即将文件写入非易失性存储器?(fflush