当前位置: 代码迷 >> 综合 >> fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux
  详细解决方案

fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux

热度:46   发布时间:2023-12-08 03:19:45.0

程序:

#include<stdio.h>

int main(int argc,char *argv[])

{

FILE * stream;

fpos_t pos;


stream = fopen(“/etc/passwd”,”r”);

fseek(stream,5,SEEK_SET);

printf(“offset=%d/n”,ftell(stream));


rewind(stream);

 /* 取得指针位置并存入&pos所指向的对象 */

fgetpos(stream,&pos);

printf(“offset=%d/n”,pos);


pos = 10;

fsetpos(stream,&pos);

printf(“offset = %d/n”,ftell(stream));


fclose(stream);

return 0;

}


结果:

offset = 5

offset = 0

offset = 10



fseek移动文件流读写位置

头文件

#include<stdio.h>

定义函数

int fseek(FILE * stream,long offset,int whence);

函数说明

fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。

参数 whence为下列其中一种:

SEEK_SET--文件开头offset位移量 为 新的读写位置。

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

SEEK_END--指向文件尾再增加offset个位移量 为 新的读写位置。


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

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

1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);

2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);


返回值

当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。

附加 

fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。


ftell取得文件流读取位置) 

头文件 

#include<stdio.h>

定义函数 

long ftell(FILE * stream);

函数说明 

ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。

返回值 

当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。

错误代码 EBADF 参数stream无效或可移动读写位置的文件流。


rewind重设文件流读写位置文件开头) 

头文件

#include<stdio.h>

定义函数 

void rewind(FILE * stream);

函数说明 

rewind()用来把文件流的读写位置移至文件开头。参数stream为已打开的文件指针。此函数相当于调用fseek(stream,0,SEEK_SET)。

返回值 

无返回值 


fgetpos取得当前文件指针所指位置

头文件

#include<stdio.h>

函数原型

int fgetpos( FILE *stream, fpos_t *pos );

函数功能

取得当前文件的指针所指的位置,并把该指针所指的位置数存放到pos所指的对象中。pos值以内部格式存储,仅由fgetpos和fsetpos使用。其中fsetpos的功能与fgetpos相反,为了详细介绍,将在后节给与说明。

返回值

成功返回0,失败返回非0,并设置errno。


fsetpos(文件指针定位pos指定位置上)

头文件

#include<stdio.h>

函数原型

int fsetpos(FILE *fp, const fpos_t *pos);

函数功能

将文件指针定位在pos指定的位置上。该函数的功能与前面提到的fgetpos相反,是将文件指针fp按照pos指定的位置在文件中定位。pos值以内部格式存储,仅由fgetpos和fsetpos使用。

返回值

成功返回0,否则返回非0。