lseek函数(lseek函数的用法)

      最后更新:2024-01-11 00:36

      为什么C语言中read函数和write函数间要用lseek来调整读取顺序

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

      函数“lseek”的参数太少

      Linux的lseek函数用来控制一个打开的文件的读写位置,它的函数原型如下: off_t lseek(int fildes,off_t offset ,int whence);参数的用法:fildes参数为一个已打开的文件描述符;参数offset为读写位置的位移数,这个位移数是根据参数whence来确定的;whence参数分为下列三种:SEEK_SET:表示offset用来直接设置读写位置。SEEK_CUR:表示以目前的读写位置往后增加offset个位移量。SEEK_END:表示将读写位置指向文件尾后再增加offset个位移量。当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值出现。当lseek调用成功时返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1,errno会存放错误代码。下面是几个使用示例:将读写位置移到文件开头:lseek(myfile, 0, SEEK_SET);将读写位置移到文件尾:lseek(myfile, 0, SEEK_END);想要取得目前文件位置:off_t cur=lseek(myfile, 0, SEEK_CUR);注意:使用lseek函数需要包含以下头文件:#include #include
      函数“lseek”的参数太少

      _lread(),_lclose()_lseek()三个函数个的功能是什么?有什么用?

      这三个是windows系统的API函数,是kernel32.dll里面的,主要是将文件读入内存,是直接读取原始文件,不会有任何修改
      HFILE _lopen( LPCSTR lpPathName, // pointer to name of file to openint iReadWrite // file access mode);//打开文件 UINT _lread(HFILE hFile, // handle to fileLPVOID lpBuffer, // pointer to buffer for read dataUINT uBytes // length, in bytes, of data buffer); //读文件 HFILE _lclose(HFILE hFile // handle to file); // 关闭文件 long _lseek(int fd,long offset,int origin); //定位文件指针
      _lread(),_lclose()_lseek()三个函数个的功能是什么?有什么用?

      关于lseek的用法!急!!

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

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类