温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Linux下的lseek()函数有什么用

发布时间:2021-08-19 10:18:43 来源:亿速云 阅读:148 作者:chen 栏目:编程语言

本篇内容主要讲解“Linux下的lseek()函数有什么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下的lseek()函数有什么用”吧!

每个打开的文件都有一个与其相关连的“当前文件偏移量”( current file offset )。它通常是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作都从当前文件偏移量开始,并使偏移量增加所读写的字节数。按系统默认情况,当打开一个文件时,除非指定 O_APPEND 选项,否则该偏移量设置为 0。

lseek调用仅将当前的文件偏移量记录在内核中,它并不引起任何的 I/O 操作。然后,该偏移量用于下一个读或写操作。

函数原型

#include<unistd.h>

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

参数fildes 为已打开的文件描述词,参数offset 为根据参数whence来移动读写位置的位移数。

whence为下列其中一种:(SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2).

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

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

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

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

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

1) 欲将读写位置移到文件开头时:
lseek(int fildes,0,SEEK_SET);
2) 欲将读写位置移到文件尾时:
lseek(int fildes,0,SEEK_END);
3) 想要取得目前文件位置时:
lseek(int fildes,0,SEEK_CUR);

返回值

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

可能设置erron的错误代码:

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

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

EINVAL:whence取值不当。

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

到此,相信大家对“Linux下的lseek()函数有什么用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI