fsetpos
来自cppreference.com
| 在标头 <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() 失败。文件 %s 行 # %d\n", __FILE__,__LINE__-3);
exit(EXIT_FAILURE);
}
int ret_code = fread(B,sizeof(double),1,fp); // 读取一个浮点值
// 当前位置:在读一个浮点值后
printf("%.1f; 读取计数 = %d\n", B[0], ret_code); // 打印一个浮点值和 ret_code
if (fsetpos(fp,&pos)) // 重设当前位置为文件起始
{
if (ferror(fp))
{
perror("fsetpos()");
fprintf(stderr,"fsetpos() 失败。文件 %s 行 # %d\n", __FILE__,__LINE__-5);
exit(EXIT_FAILURE);
}
}
ret_code = fread(B,sizeof(double),1,fp); // 重读首个浮点值
printf("%.1f; 读取计数 = %d\n", B[0], ret_code); // 打印一个浮点值和 ret_code
fclose(fp);
return EXIT_SUCCESS;
}
可能的输出:
1.0; 读取计数 = 1
1.0; 读取计数 = 1
引用
- C23 标准(ISO/IEC 9899:2024):
- 7.21.9.3 The fsetpos function (第 TBD 页)
- C17 标准(ISO/IEC 9899:2018):
- 7.21.9.3 The fsetpos function (第 TBD 页)
- C11 标准(ISO/IEC 9899:2011):
- 7.21.9.3 The fsetpos function (第 337 页)
- C99 标准(ISO/IEC 9899:1999):
- 7.19.9.3 The fsetpos function (第 303 页)
- C89/C90 标准(ISO/IEC 9899:1990):
- 4.9.9.3 The fsetpos function
参阅
| 获取文件位置指示器 (函数) | |
| 返回当前的文件位置指示值 (函数) | |
| 将文件位置指示符移动到文件中的指定位置 (函数) | |
fsetpos 的 C++ 文档
| |