lseek函数如何根据whence参数移动Linux文件的读写位置?

作者&投稿:隐迹 (若有异议请与网页底部的电邮联系)
~

Linux C中控制文件读写位置的函数lseek详解


在Linux C编程中,我们经常需要用到几个与文件操作密切相关的函数,如dup、open和fseek。首先,我们需要包含两个表头文件:<sys/types.h> 和 <unistd.h>。


关键的函数是 off_t lseek(int fildes, off_t offset, int whence);。这个函数用于控制已打开文件的读写位置。每当文件被打开时,读写位置通常位于文件的开始,除非使用O_APPEND模式打开,此时位置指向文件尾。read()和write()操作会相应地更新位置,而lseek()允许我们灵活地调整这个位置。


参数说明:



  • 参数fildes:已打开文件的描述符,用于指定要操作的文件。

  • 参数offset:偏移量,以字节为单位,表示要移动的位移。它可正可负,根据whence参数进行调整。

  • 参数whence:一个枚举值,包括SEEK_SET(0)、SEEK_CUR(1)和SEEK_END(2)。它指示偏移量基于文件的哪个位置计算:文件头、当前位置或文件尾。


特别的使用场景包括:



  • lseek(int fildes, 0, SEEK_SET):将读写位置移动到文件开头。

  • lseek(int fildes, 0, SEEK_END):将读写位置移动到文件尾。

  • lseek(int fildes, 0, SEEK_CUR):获取当前的文件位置。


调用成功时,lseek()返回当前的读写位置,即距离文件开头的字节数。如果发生错误,返回-1,errno变量将记录错误代码。特别值得注意的是,Linux系统不允许lseek()对tty设备操作,尝试这样操作会返回ESPIPE错误。




FFMpeg中seek函数解析
这个函数不管你当前在什么时间点上,都可以seek到任何合理位置。比如要实现在当前的基础上向后或向前跳转10秒,我们可以在av_read_frame函数拿到的包中含有当前时间戳的基础上增加或减少一个10000(换算成播放时间单位)再seek即可。所以这个函数可以用做进度的拖放、前进\/后退一定时间、循环播放等功能。s ...

seek的用法
Seek 函数 返回一个 Long,在 Open 语句打开的文件中指定当前的读\/写位置。语法Seek(filenumber)必要的 filenumber 参数是一个包含有效文件号的 Integer。说明Seek 函数返回介于 1 和 2,147,483,647(相当于 2^31 – 1)之间的值。对各种文件访问方式的返回值如下:方式返回值Random下一个读出或...

功能:seek函数:判断是否有不合格成绩;形参:1个,指 向由3个int型元素组 ...
\/\/检查通过返回0,否则返回不合格成绩的序号int seek(int *pGrades){ for(int i=0;i<3;++i) { if(pGrades[i] < 0 || pGrades[i] > 100) return i+1; } return 0;}\/\/检查通过返回true,否则返回falsebool seek(int *pGrades){ for(int i=0;i<3;++i) ...

c++中的seekg函数
输入流类的成员函数的名字seekg由两部分组成。首先是seek(寻找)到文件中的某个地方,其次是"g"表示"get",指示函数在输入流上工作,因为要从输入流获取数据。要查找的文件中的新位置由两个形参给出:新位置将从由place给出的起始位置开始,偏移offset个字节。offset形参是一个long类型的整数,而place...

VB中关于seek函数问题
Seek 指定当前的读\/写位置。位置是以字节为单位的

VB中seek函数和loc函数的问题!!!
SeeK可以查询一个记录,也可以定位一个字节,这根据自己打开文件读取的方式而定。LOC总是读取字节首先看看seek的用法:本示例使用 Seek 函数返回当前文件位置。本示例假定 TestFile 是包含 Record 结构记录的文件。Visual Basic 复制代码 Structure Record ' Define user-defined type. Dim ID As Integer ...

linux lseek函数怎么用
Linux的lseek函数用来控制一个打开的文件的读写位置,它的函数原型如下:off_t lseek(int fildes,off_t offset ,int whence);参数的用法:fildes参数为一个已打开的文件描述符;参数offset为读写位置的位移数,这个位移数是根据参数whence来确定的;whence参数分为下列三种:SEEK_SET:表示offset用来直接...

Linux seek函数 用法提问
其实试试就行了。lseek() 就是把当前文件描述符的位置设到哪里,然后读写就从哪里开始了<在正常情况下>。而你所考虑的,其实已经与seek无关了。写个最简单的demo:一个文件里有 abcd 四个字母。然后你直接open()找个文件,然后在文件的开头<0偏移处>,写一个r字母进去。然后保存。再然后读取...

python中 file.seek( ) 的用法?
seek那个函数不返回值,你print淡然显示为None了 file.seek(0)是重新定位在文件的第0位及开始位置 file = open("test.txt","rw") #注意这行的变动 file.seek(3) #定位到第3个 for i in file:print i 现在到了最后一位了 for i in file:print i 不会显示任何结果 file.seek(0) #...

VB中的seek 1 是什么意思和有什么用法功能?
Seek语句用于定位文件指针。顺序文件的指针移动长度与它要读写的字符串长度相同;随机文件指针的最小移动单位是一个记录的长度。Seek语句可设置文件中下一个读或写的位置,其格式为:Seek #文件号,位置Seek函数格式:(该函数用来返回文件指针的当前位置)Seek(文件号)

普宁市15118083189: 函数“lseek”的参数太少 -
离福益脑: Linux的lseek函数用来控制一个打开的文件的读写位置,它的函数原型如下:off_t lseek(int fildes,off_t offset ,int whence); 参数的用法:fildes参数为一个已打开的文件描述符;参数offset为读写位置的位移数,这个位移数是根据参数whence来...

普宁市15118083189: 关于函数lseek的用法!急!!
离福益脑: lseek(int filehandle,0,SEEK_END) 开始有点不清楚你的想法,以为就是找个语法,写到末尾. 你的问题,我觉得重新写入到另外一个文件比较好.如果确实要追加到结尾,就是sort之后,写入用seek_end;读取的时候, lseek(filehandle,fsize/2,seek_set) (假设你的文件sort之后长度一样,排好序的刚好从文件长度的 1/2开始,其他情况,你可能要写自己的文件头了.)

普宁市15118083189: LSEEK这个英文什么意思? -
离福益脑: LSEEK 函数功能 函数名: lseek 功 能: 移动文件读/写指针 用 法: long lseek(int handle, long offset, int fromwhere); 程序示例 #include #include #include #include #include int main(void) { int handle; char msg[] = "This is a test"; char ch; /* ...

普宁市15118083189: excel表格的公式如何随日期变动选择当天的数据 -
离福益脑: “excel表格随日期变动选择当天的数据”的操作步骤是: 1、打开Excel工作表;2、由题意可知,需要在下图的Sheet2的C27单元格,根据当天的日期,在上图的Sheet1的首行匹配到相应的日期,然后返回第40行的对应数据.这样引用数...

普宁市15118083189: linux系统中用lseek()生成的空洞文件有什么用? -
离福益脑: 空洞文件很有用的,看看迅雷下载的文件,在未下载完成时就已经占据了全部文件大小的空间,这时候就是空洞文件.下载时如果没有空洞文件,多线程下载时文件就都只能从一个地方写入,这就不是多线程了.如果有了空洞文件,可以从不同...

普宁市15118083189: fseek函数,文件指针定位 -
离福益脑: fseek(fp1,m,1);把文件内部指针移动到离文件开头m字节处 第二个参数m偏移量,第三个参数1表示当前位置 它表示偏移量,如果m超过1行的长度,只会回到行首,你要将文件指针fp1上移两行不能用这个函数fseek,是用于二进制方式打开的...

普宁市15118083189: 怎样用lseek()函数将一个文件的内容附加到另一个文件上? -
离福益脑: int main() { int iSrcFd = 0; int iDesFd = 0; CHAR acReadBuf[128] = {0}; int iReadBytes = 0; int iWrtBytes = 0; /* open the source file*/ iSrcFd = open("1.txt",O_RDWR | O_SYNC); if (iSrcFd{ return -1; } iReadBytes = read(iSrcFd, acReadBuf, 128);...

普宁市15118083189: read pread write pwrite fseek lseek是同一类函数吗 -
离福益脑: lseek是库函数. 库函数就是C++最基本的函数,也就是说没有这些东西无法定义C++. C++的制定标准,并不决定库函数的底层是如何实现的,主要决定实现结果和大致逻辑. 所以,对于不同系统不同型号机器的lseek,它的实现是不一样的. 在大多数系统

普宁市15118083189: 为什么C语言中read函数和write函数间要用lseek来调整读取顺序 -
离福益脑: -由于程序在打开文件时文件操作指针位于文件起始位置,即偏移量0-读取了1个字符的内容给变量c,文件指针偏移量为1-这时如果想将c值写到文件开始位置,则需要移动文件指针到文件开始-于是lseek就是移动文件当前指针的语句,它通知系统将文件指针移动到从文件开始位置(SEEK_SER)起的第0字节-这个程序比较奇怪,明明打开文件时选用了0_WRONLY参数,表明这个打开是只写的,但上来就读

普宁市15118083189: excel HLOOK查找区域是变量,需要函数根据某个单元格的内容自动选择查找区域,怎么弄? -
离福益脑: 根据单元格内容改变HLOOKUP函数查找区域的步骤是:1、打开Excel工作表;2、根据已知条件,判断数据规律,整理数据关系.HLOOKUP函数的对象首行由B5在Sheet2的A2:A100中匹配得到相应的行,那么可以通过OFFSET+MATCH函数...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网