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

fsetpos函数


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

描述:

该函数根据参数pos指向对象的值设置mbstate_t对象(如果存在。),并为参数stream指向的流设置文件位置指示符(file position indicator),参数pos指向对象的值通过先前对相同文件调用fgetpos函数获取。如果发生读写错误,将为参数stream指向的流设置错误指示符(error indicator),函数调用失败。

成功调用该函数将消除ungetc函数对流的影响,清除流文件末尾指示符,建立新的解析状态和位置。成功调用该函数后,下一步对更新流的操作可以是输入操作,也可以是输出操作。


参数:
FILE *stream

指向一个打开的流的指针。

const fpos_t *pos

指向fpos_t类型对象的指针,其指向对象值通过先前调用fgetpos函数获取。


返回值:

如果调用成功,函数返回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 
/*函数fsetpos范例*/

#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 记录文件中位置所需的所有信息的对象类型。
fgetpos 获取流位置和解析状态当前值的函数。