lseek函数(lseek函数会影响文件偏移吗)

      最后更新:2024-03-21 11:09:56 手机定位技术交流文章

      关于lseek的用法!急!!

      思路是这样的。 我想你的意思是说在文件中有两份同样的数据,一份在前面未排序,一会在后面,排序方法很简单。先移至末尾,会吧,这个简单然后利用tell函数求出文件长度(在末尾时候的偏移就是文件长度)除以2的值就是要移动去的地方,再移动到文件的中间 即可
      先得到原文件的长度,然后在将光标移到该位置顺序往下读取文件就行了。
      关于lseek的用法!急!!

      _lseek函数出错

      第2个参数是负的,第三个参数不能用文件开始。可以用文件尾或当前位置,但不能负得 超出文件范围。
      _lseek函数出错

      read pread write pwrite fseek lseek是同一类函数吗

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

      lseek函数出现空洞的返回值是什么啊?

      函数名: lseek功能:移动文件读/写指针用法:longlseek(inthandle,longoffset,intfromwhere);所有打开的文件都有一个当前文件偏移量(currentfileoffset),以下简称为cfo。cfo通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于cfo,并且使cfo增大,增量为读写的字节数。文件被打开时,cfo会被初始化为0,除非使用了O_APPEND。使用lseek函数可以改变文件的cfo。lseek的以下用法返回当前的偏移量:off_tcurrpos;currpos=lseek(fd,0,SEEK_CUR);这个技巧也可用于判断我们是否可以改变某个文件的偏移量。如果参数fd(文件描述符)指定的是pipe(管道)、FIFO或者socket,lseek返回-1并且置errno为ESPIPE。对于普通文件(regularfile),cfo是一个非负整数。但对于特殊设备,cfo有可能是负数。因此,我们不能简单地测试lseek的返回值是否小于0来判断lseek成功与否,而应该测试lseek的返回值是否等于-1来判断lseek成功与否。lseek仅将cfo保存于内核中,不会导致任何I/O操作。这个cfo将被用于之后的读写操作。如果offset比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有被实际写入文件的所有字节由重复的0表示。空洞是否占用硬盘空间是由文件系统(filesystem)决定的。编辑本段程序例#include#include#include#include#include#includeintmain(void){inthandle;charmsg[]="Thisisatest";charch;/*createafile*/handle=open("TEST.$$$",O_CREAT|O_RDWR,S_IREAD|S_IWRITE);/*writesomedatatothefile*/write(handle,msg,strlen(msg));/*seektothebeginingofthefile*/lseek(handle,0L,SEEK_SET);/*readscharsfromthefileuntilwehitEOF*/do{read(handle,&ch,1);printf("%c",ch);}while(!eof(handle));close(handle);return0;}追问:如果offset比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有被实际写入文件的所有字节由重复的0表示。空洞是否占用硬盘空间是由文件系统(filesystem)决定的。还是没有回答返回值啊追答:返回值为0 空洞都被0填充
      函数名: lseek功能:移动文件读/写指针用法:longlseek(inthandle,longoffset,intfromwhere);所有打开的文件都有一个当前文件偏移量(currentfileoffset),以下简称为cfo。cfo通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于cfo,并且使cfo增大,增量为读写的字节数。文件被打开时,cfo会被初始化为0,除非使用了O_APPEND。使用lseek函数可以改变文件的cfo。lseek的以下用法返回当前的偏移量:off_tcurrpos;currpos=lseek(fd,0,SEEK_CUR);这个技巧也可用于判断我们是否可以改变某个文件的偏移量。如果参数fd(文件描述符)指定的是pipe(管道)、FIFO或者socket,lseek返回-1并且置errno为ESPIPE。对于普通文件(regularfile),cfo是一个非负整数。但对于特殊设备,cfo有可能是负数。因此,我们不能简单地测试lseek的返回值是否小于0来判断lseek成功与否,而应该测试lseek的返回值是否等于-1来判断lseek成功与否。lseek仅将cfo保存于内核中,不会导致任何I/O操作。这个cfo将被用于之后的读写操作。如果offset比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有被实际写入文件的所有字节由重复的0表示。空洞是否占用硬盘空间是由文件系统(filesystem)决定的。编辑本段程序例#include#include#include#include#include#includeintmain(void){inthandle;charmsg[]="Thisisatest";charch;/*createafile*/handle=open("TEST.$$$",O_CREAT|O_RDWR,S_IREAD|S_IWRITE);/*writesomedatatothefile*/write(handle,msg,strlen(msg));/*seektothebeginingofthefile*/lseek(handle,0L,SEEK_SET);/*readscharsfromthefileuntilwehitEOF*/do{read(handle,&ch,1);printf("%c",ch);}while(!eof(handle));close(handle);return0; }
      设置文件偏移量为绝对值成功或失败,失败则为-1
      lseek函数出现空洞的返回值是什么啊?

      fseek函数

      fseek函数: int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。功能:重定位流(数据流/文件)上的文件内部位置指针。注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。程序例:#include long filesize(FILE*stream);int main(void){FILE *stream;stream=fopen("MYFILE.TXT","w+");fprintf(stream,"Thisisatest");printf("FilesizeofMYFILE.TXTis%ldbytesn",filesize(stream));fclose(stream);return 0;}long filesize(FILE*stream){long curpos,length;curpos=ftell(stream);fseek(stream,0L,SEEK_END);length=ftell(stream);fseek(stream,curpos,SEEK_SET);return length;}int fseek( FILE *stream, long offset, int origin );第一个参数stream为文件指针第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SETSEEK_SET: 文件开头SEEK_CUR: 当前位置SEEK_END: 文件结尾其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.简言之:fseek(fp,100L,0);把文件内部指针移动到离文件开头100字节处;fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。使用实例:#include#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;fp=fopen(filename,"rb+");fseek(fp,-1L*sizeof(STU),SEEK_END);fwrite(&n,sizeof(STU),1,fp);fclose(fp);}voidmain()/*修改覆盖最后一个学生数据*/{STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STUn={10006,"ZhaoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("nTheoriginaldata:nn");for(j=0;j是的 int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。 fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。
      feek(文件指针,位移量,起始点) SEEK-END的数字表示就是2,既文件末尾
      定位文件尾。注意此时并不是定位到文件的最后一字符,而是在定位文件最后一个字符之后的位置
      首先:fseek函数的功能是,重定位流上的文件指针。 例如,#include"stdio.h"fseek(文件类型指针fp,位移量,起始点);函数功能:把与fp有关的文件位置指针放到一个指定位置。SEEK_SET 代表文件开头SEEK_CUR 代表文件当前位置SEEK_END 代表文件末尾例如:fseek(fp,50L,0);或fseek(fp,50L,SEEK_SET);其作用是将位置指针移到离文件头50个字节处。 所以根据你的提问,确实是你所理解的将fp指针移到到文件结尾。
      fseek函数

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/306998.html

          热门文章

          文章分类