fsetpos
From cppreference.net
File input/output
| Types and objects | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<stdio.h>
|
||
根据 pos 所指向的值,设置文件流 stream 的文件位置指示器及多字节解析状态(如果存在)。
除了建立新的解析状态和位置外,调用此函数会撤销 ungetc 的效果,并清除已设置的文件结束状态。
如果发生读取或写入错误,流的错误指示器( ferror )将被设置。
目录 |
参数
| stream | - | 要修改的文件流 |
| pos | - | 指向 fpos_t 对象的指针,用作文件位置指示器的新值 |
返回值
0 表示成功,非零值表示失败。
注释
在宽流中定位到非结尾位置后,下一次调用任何输出函数都可能使文件剩余部分变为未定义状态,例如通过输出不同长度的多字节序列。
示例
fsetpos
带错误检查
运行此代码
#include <stdio.h> #include <stdlib.h> int main(void) { // 准备浮点数值数组 #define SIZE 5 double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0}; // 将数组写入文件 FILE * fp = fopen("test.bin", "wb"); fwrite(A,sizeof(double),SIZE,fp); fclose (fp); // 将浮点数值读入数组B double B[SIZE]; fp = fopen("test.bin","rb"); fpos_t pos; if (fgetpos(fp, &pos)) // 当前位置:文件起始处 { perror("fgetpos()"); fprintf(stderr, "fgetpos() failed in file %s at line # %d\n", __FILE__, __LINE__ - 3); exit(EXIT_FAILURE); } int ret_code = fread(B,sizeof(double),1,fp); // 读取一个浮点数值 // 当前位置:读取一个浮点值后 printf("%.1f; read count = %d\n", B[0], ret_code); // 打印一个浮点值和返回码 if (fsetpos(fp, &pos)) // 将当前位置重置到文件起始处 { if (ferror(fp)) { perror("fsetpos()"); fprintf(stderr, "fsetpos() failed in file %s at line # %d\n", __FILE__, __LINE__ - 5); exit(EXIT_FAILURE); } } ret_code = fread(B, sizeof(double), 1, fp); // 重新读取第一个浮点数值 printf("%.1f; read count = %d\n", B[0], ret_code); // 打印一个浮点值和返回码 fclose(fp); return EXIT_SUCCESS; }
可能的输出:
1.0; read count = 1 1.0; read count = 1
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 7.21.9.3 fsetpos 函数 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.21.9.3 fsetpos 函数 (p: TBD)
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.21.9.3 fsetpos 函数 (p: 337)
- C99标准(ISO/IEC 9899:1999):
-
- 7.19.9.3 fsetpos函数(页数:303)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 4.9.9.3 fsetpos 函数
参见
|
获取文件位置指示器
(函数) |
|
|
返回当前文件位置指示器
(函数) |
|
|
将文件位置指示器移动到文件中的特定位置
(函数) |
|
|
C++ documentation
for
fsetpos
|
|