lseek() - Unix,Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于 TP  

lseek() - Unix,Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

lseek - 重置读/写文件偏移量

语法

#include <sys/types.h>
#include <unistd.h>

off_t lseek(int fildes, off_t offset, int whence);

描述

lseek() 函数根据指令 whence 重置与文件描述符 fildes 关联的打开文件的偏移量到参数 offset,如下所示
标签描述
SEEK_SET
 偏移量设置为 offset 字节。
SEEK_CUR
 偏移量设置为其当前位置加上 offset 字节。
SEEK_END
 偏移量设置为文件大小加上 offset 字节。
lseek() 函数允许文件偏移量设置为文件末尾之外(但这不会更改文件的大小)。如果稍后在此处写入数据,则间隙中的数据(“空洞”)的后续读取将返回空字节(’\0’),直到实际将数据写入间隙。

返回值

成功完成后,lseek() 返回结果偏移量位置,以从文件开头测量的字节为单位。否则,返回 (off_t)-1,并设置 errno 以指示错误。

错误

标签描述
EBADF fildes 不是打开的文件描述符。
EINVAL whence 不是 SEEK_SET、SEEK_CUR 或 SEEK_END 之一;或者结果文件偏移量将为负,或者超出可搜索设备的末尾。
EOVERFLOW
 结果文件偏移量无法表示为 off_t
ESPIPE fildes 与管道、套接字或 FIFO 相关联。

符合标准

SVr4、4.3BSD、POSIX.1-2001。

限制

某些设备无法搜索,并且 POSIX 未指定哪些设备必须支持 lseek()。

Linux 特定限制:在 tty 设备上使用 lseek() 返回 ESPIPE

备注

本文档使用 whence 的方式是不正确的英语,但出于历史原因而保留。

转换旧代码时,请使用以下宏替换 whence 的值

0SEEK_SET
1SEEK_CUR
2SEEK_END
L_SETSEEK_SET
L_INCRSEEK_CUR
L_XTNDSEEK_END

SVr1-3 返回 long 而不是 off_t,BSD 返回 int

请注意,由 dup(2) 或 fork(2) 创建的文件描述符共享当前文件位置指针,因此对这些文件进行搜索可能会受到竞争条件的影响。

参见



previous next Printer Friendly

广告


  

广告



广告