您现在的位置:首页 --> 查看专题: write
今天一个同事问我关于write(2)在写入文件的时候问题,问题是这样的:当磁盘剩余空间不能将一次write调用希望写入的数据写完的时候,write是直接返回-1,然后设置errno为ENOSPC,还是先写入一部分数据,将剩余空间占满然后再下一次调用的时候返回错误?当时发现好像没有考虑过这样的问题,Google了一下,好像没有找到关于这个细节的说明。于是今天决定自己试试看。用dd建立一个64M大小的文件,然后弄上不同的文件系统用loop挂载,去写满试试看。
write ssize_t write(int fd, const void *buf, size_t count); 将数据写到文件中. 注意, 如果文件是保存在硬盘中, write() 函数调用返回之后, 并不表示数据已经写入到硬盘中, 这时如果掉电, 数据可能会丢失. fsync int fsync(int fd); 程序调用本函数, 通知内核把数据写到硬盘(file)中. 比如, 你开发一个数据库软件, 就需要这样的函数, 否则掉电或者系统崩溃时便会丢失数据. 如果你的程序不调用 fsync(), Linux 内核也会自动在”合适”的时候将你的数据真正写入到硬盘(类似调用 fsync), 最长的延时默认是 30 秒. 阻塞阻塞是 IO 的精华所在, 不管是文件 IO 还是网络 IO, 只有真正了理解了 IO 阻塞, 才能做出所谓在高并发高性能软件(服务器)
[ 共2篇文章 ][ 第1页/共1页 ][ 1 ]
近3天十大热文
-
[311] WordPress插件开发 -- 在插件使用 -
[151] 解决 nginx 反向代理网页首尾出现神秘字 -
[93] IOS安全–浅谈关于IOS加固的几种方法 -
[49] Linux Used内存到底哪里去了? -
[49] cookie窃取和session劫持 -
[49] 程序员技术练级攻略 -
[48] Hacker News 排名算法工作原理 -
[48] Shell的那些事儿 -
[48] 到底什么是MVC? -
[47] 中间件和稳定性平台
赞助商广告