lseek

Lseek:

 

相关函数

dupopenfseek


表头文件

#include<sys/types.h>

#include<unistd.h>


定义函数

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


函数说明

每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(O_APPEND),则读写位置会指向文件尾。当read()write()时,读写位置会随之增加,lseek()便是用来控制该文件的读写位置。参数fildes 为已打开的文件描述词,参数offset 为根据参数whence来移动读写位置的位移数。

Offset偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移)。


参数

whence为下列其中一种:SEEK_SET,SEEK_CURSEEK_END和依次为012.

SEEK_SET 将读写位置指向文件头后再增加offset个位移量。

SEEK_CUR 以目前的读写位置往后增加offset个位移量。

SEEK_END 将读写位置指向文件尾后再增加offset个位移量。

whence 值为SEEK_CUR SEEK_END时,参数offet允许负值的出现。

下列是较特别的使用方式:

1) 欲将读写位置移到文件开头时:

lseekint fildes,0,SEEK_SET);

2) 欲将读写位置移到文件尾时:

lseekint fildes0,SEEK_END);

3) 想要取得目前文件位置时:

lseekint fildes0,SEEK_CUR);


返回值

当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1errno 会存放错误代码

可能设置erron的错误代码:

EBADF: fildes不是一个打开的文件描述符。

ESPIPE:文件描述符被分配到一个管道、套接字或FIFO

EINVAL:whence取值不当。[1]


附加说明

Linux系统不允许lseek()对tty装置作用,此项动作会令lseek()返回ESPIPE

SEEK_SET 等同于数字0 例如lseekint fildes,0,SEEK_SET);=lseekint fildes,0,0);

SEEK_CUR 等同于数字1 例如lseekint fildes,0,SEEK_CUR);=lseekint fildes,0,1);

SEEK_END 等同于数字2 例如lseekint fildes,0,SEEK_END);=lseekint fildes,0,2);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值