回答

收藏

飞凌嵌入式ElfBoard ELF 1板卡-通用文件I/O模型之lseek

其他 其他 1001 人阅读 | 0 人回复 | 2024-10-15

lseek()函数用于重新定位读/写文件偏移量,默认打开一个文件时,除非指定O_APPEND,否则偏移量为0,并不适合所有文件,如管道、FIFO或网络套接字或终端。函数原型如下:

fd为文件描述符,用于指定要写入的文件;
offset表示偏移量,表示要移动的字节数,可以为正数、负数、零;
whence指定偏移的基准点,有三组值:
若whence为SEEK_SET,表示从文件开始处偏移;
若whence为SEEK_CUR,表示从当前位置偏移;
若whence为SEEK_END,表示从文件结尾处偏移;
如果文件描述符指向一个管道、FIFO或网络套接字,返回-1,且errno为ESPIPE;
测试lseek的返回值时需要谨慎,不要测试是否小于0,要测试是否等于-1;
lseek仅将文件偏移量记录到内核,不引起任何IO操作,该偏移量用于下一次读写;
文件偏移量可以大于文件长度,对文件下一次的写操作将加长该文件并构成一个空洞(文件大小一样,但是占用的磁盘块不一样),没写过的字节被读为0;

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条