免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1694 | 回复: 7
打印 上一主题 下一主题

lseek问题疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-17 13:23 |只看该作者 |倒序浏览
请教,当lseek第三个参数whence为SEEK_END时,第二个参数offet是不是只能为负或0,为正的话和0一样?自己试验后是这样,但是看到有些地方写的是当whence 值为SEEK_CUR 或SEEK_END时,参数offet允许负值的出现。看这句话好像是SEEK_END时offet为正的话也有意义,谢谢解答!

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2010-03-17 13:30 |只看该作者
The  lseek()  function  shall  allow  the file offset to be set beyond the end of the existing data in the file. If data is later
       written at this point, subsequent reads of data in the gap shall return bytes with the value 0 until  data  is  actually  written
       into the gap.

man里面说是可以seek到文件尾之后的

论坛徽章:
0
3 [报告]
发表于 2010-03-17 13:32 |只看该作者
SEEK_END时,如果offset为正,那就增大文件体积啊

论坛徽章:
0
4 [报告]
发表于 2010-03-17 13:51 |只看该作者
当whence为SEEK_END时,offset可以为正,这样会在文件中造成空洞,LZ可以用 ls -l 命令查看程序执行前后文件体积的变化

论坛徽章:
0
5 [报告]
发表于 2010-03-17 14:11 |只看该作者
从SEEK_END正向seek的话,就是增加文件大小的作用,主要是inode中的大小会更新(ls -l 查看的值)。
如果文件系统支持空洞文件的话,不会真实占有空间,du得到的结果是真实占有的容量,小于ls 的值。
如果文件系统不支持,那就会真实申请空间,有了真正的数据空间,du的值和ls -l 的值就一样

论坛徽章:
0
6 [报告]
发表于 2010-03-17 17:35 |只看该作者
lseek增大文件,应该没需要发生一次真实的读写把

论坛徽章:
0
7 [报告]
发表于 2010-03-17 18:41 |只看该作者
lseek到哪都行,可以大于文件长度,那样下次写时空洞就形成了。

论坛徽章:
0
8 [报告]
发表于 2010-03-17 23:33 |只看该作者
回复 6# ubuntuer

我错误了,上次听我们自己文件系统的讲座,说我们的我们的文件系统不支持空洞,就理解成这个语义了,今天仔细看了一下才知道是粒度的问题。
lseek不会真实分配,这是正确的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP