重读APUE(1)-lseek注意事项

左心房为你撑大大i 提交于 2019-12-02 21:13:05

lseek使用的注意事项:

1. lseek的返回值,成功返回新的文件偏移量,失败返回-1,不能用<0判断;因为文件偏移量可能是正的,也可能是负的,所以不能使用<0判断成功与否;注意:对于普通文件,偏移量必须是非负的;但比如Intel x86处理器上运行的FreeBSD设备/dev/kmem就支持负的偏移量;

2. lseek只是把文件偏移量存在内核中,用于下一次的读或者写,并不会引起IO操作;lseek系统调用实际上最后会调用内核的file_operations->llseek函数;

3. 文件偏移量可以大于文件的当前长度;这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞;注意,位于文件中,但是没有写过的字节都被读为0,并且这些空洞不需要占用磁盘存储区;

4. 使用追加方式打开文件后调用lseek;可以调用lseek,read可以读取任意设置的偏移位置的数据,但是write写之前会将偏移设置到文件尾,只能从文件尾开始写文件;

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!