当前位置: C语言 -- 标准库 -- <stdio.h> -- fgetpos

fgetpos函数


概要:
#include <stdio.h>
int fgetpos(FILE * restrict stream,
      fpos_t * restrict pos);

描述:

该函数将解析状态(如果存在。)的当前值和参数stream指向流的文件位置指示符存入参数pos指向的对象。存储值包含未指明信息,fsetpos函数可使用该存储值将流位置重新定位到fgetpos函数调用时的位置。


参数:
FILE * restrict stream

FILE类型指针,指向一个打开的流。

fpos_t * restrict pos

指向fpos_t类型对象的指针,当前解析状态(如果存在。)和文件位置指示符将存储在其指向对象中。


返回值:

如果调用成功,函数返回0;否则函数返回一个非0值,并将一个实现定义的正值存入errno


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
/*函数fgetpos范例*/

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  FILE *pFile;
  fpos_t pos;
  int ch;

  /*打开文件。*/
  pFile = fopen("gch.txt","r+");
  if(!pFile)
  {
      perror("Error");
      exit(EXIT_FAILURE);
  }

  /*遍历文件。*/
  while((ch=fgetc(pFile)) != EOF)
  {
      if(isblank(ch))
      {
          /*获取文件位置。*/
          fgetpos(pFile, &pos);
          break;
      }
  }

  /*设置文件位置。*/
  fsetpos(pFile, &pos);

  fputs("China",pFile);

  /*关闭文件。*/
  fclose(pFile);

  return 0;
}


结果:

打开一个名为gch.txt的文件,在第一个空格后写入China

:根据ISO/IEC 9899:2018标准第7.21.5.3 The fopen function节,当模式参数含有字符+时,可以在相关联的流上执行输入和输出操作。在没有调用fflush函数或者文件定位函数(例如:fseekfsetposrewind函数。)的情况下,输出操作后不能立即执行输入操作;在没有调用文件定位函数的情况下,输入操作后不能立即执行输出操作,除非输入操作到达文件末尾(end-of-file)。


相关内容:
fpos_t 记录文件中位置所需的所有信息的对象类型。
fsetpos 设置流位置和mbstate_t对象的函数。