怎么在Linux中调用fsync函数

怎么在Linux中调用fsync函数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

功能描述: 同步内存中所有已修改的文件数据到储存设备。 用法: #include <unistd.h> int fsync(int fd); 参数: fd:文件描述词。 返回说明: 成功执行时,返回0。失败返回-1,errno被设为以下的某个值 EBADF: 文件描述词无效 EIO : 读写的过程中发生错误 EROFS, EINVAL:文件所在的文件系统不支持同步 强制把系统缓存写入文件sync和fsync函数,, fflush和fsync的联系和区别2010-05-10 11:25传统的U N I X实现在内核中设有缓冲存储器,大多数磁盘I / O都通过缓存进行。当将数据写 到文件上时,通常该数据先由内核复制到缓存中,如果该缓存尚未写满,则并不将其排入输出 队列,而是等待其写满或者当内核需要重用该缓存以便存放其他磁盘块数据时,再将该缓存排 入输出队列,然后待其到达队首时,才进行实际的I / O操作。这种输出方式被称之为延迟写 (delayed write)(Bach 〔1 9 8 6〕第3章详细讨论了延迟写)。延迟写减少了磁盘读写次数,但是 第4章文件和目录8 7 下载 却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。当 系统发生故障时,这种延迟可能造成文件更新内容的丢失。为了保证磁盘上实际文件系统与缓 存中内容的一致性,U N I X系统提供了s y n c和f s y n c两个系统调用函数。 #include <unistd.h> void sync(void); int fsync(intf i l e d e s) ; 返回:若成功则为0,若出错则为-1 s y n c只是将所有修改过的块的缓存排入写队列,然后就返回,它并不等待实际I / O操作结束。 系统精灵进程(通常称为u p d a t e )一般每隔3 0秒调用一次s y n c函数。这就保证了定期刷新内 核的块缓存。命令s y n c ( 1 )也调用s y n c函数。 函数f s y n c只引用单个文件(由文件描述符f i l e d e s指定),它等待I / O结束,然后返回。f s y n c可 用于数据库这样的应用程序,它确保修改过的块立即写到磁盘上。比较一下f s y n c和O _ S Y N C标 志(见3 . 1 3节)。当调用f s y n c时,它更新文件的内容,而对于O _ S Y N C,则每次对文件调用w r i t e 函数时就更新文件的内容。 fflush和fsync的联系和区别 [zz ] http://blog.chinaunix.net/u2/73874/showart_1421917.html 1.提供者fflush是libc.a中提供的方法,fsync是系统提供的系统调用。2.原形fflush接受一个参数FILE *.fflush(FILE *);fsync接受的时一个Int型的文件描述符。fsync(int fd);3.功能fflush:是把C库中的缓冲调用write函数写到磁盘[其实是写到内核的缓冲区]。fsync:是把内核缓冲刷到磁盘上。 c库缓冲-----fflush---------〉内核缓冲--------fsync-----〉磁盘 关于怎么在Linux中调用fsync函数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

怎么在Linux中调用fsync函数

发布于 2021-03-16 13:46:18
收藏
分享
海报
0 条评论
180
上一篇:如何在linux中使用awk函数 下一篇:怎么在PHP中使用time_nanosleep() 函数
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码