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

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写之前会将偏移设置到文件尾,只能从文件尾开始写文件;

本文链接:重读APUE(1)-lseek注意事项

转载声明:转载请注明来源:Linux TCP/IP Stack,谢谢!


发表评论

电子邮件地址不会被公开。 必填项已用*标注