- C 标准库
- C 库 - 首页
- C 库 - <assert.h>
- C 库 - <complex.h>
- C 库 - <ctype.h>
- C 库 - <errno.h>
- C 库 - <fenv.h>
- C 库 - <float.h>
- C 库 - <inttypes.h>
- C 库 - <iso646.h>
- C 库 - <limits.h>
- C 库 - <locale.h>
- C 库 - <math.h>
- C 库 - <setjmp.h>
- C 库 - <signal.h>
- C 库 - <stdalign.h>
- C 库 - <stdarg.h>
- C 库 - <stdbool.h>
- C 库 - <stddef.h>
- C 库 - <stdio.h>
- C 库 - <stdlib.h>
- C 库 - <string.h>
- C 库 - <tgmath.h>
- C 库 - <time.h>
- C 库 - <wctype.h>
- C 标准库资源
- C 库 - 快速指南
- C 库 - 有用资源
- C 库 - 讨论
C 库 - fgetpos() 函数
C 库的 fgetpos(FILE *stream, fpos_t *pos) 函数获取流的当前文件位置,并将其写入 pos。它将位置存储在一个 fpos_t 类型的变量中。当您需要保存文件中的特定位置并在以后返回到该位置时,此函数很有用。
语法
以下是 C 库 fgetpos() 函数的语法:
int fgetpos(FILE *stream, fpos_t *pos);
参数
此函数接受两个参数:
- FILE *stream: 指向 FILE 对象的指针,用于标识流。
- fpos_t *pos: 指向 fpos_t 类型对象的指针,存储位置。
返回值
fgetpos() 函数在成功时返回 0,失败时返回非零值。
示例 1:简单的获取位置
此示例演示如何获取并打印文件中的当前位置。
以下是 C 库 fgetpos() 函数的示例。
#include <stdio.h>
int main() {
FILE *file = fopen("example1.txt", "w+");
if (file == NULL) {
perror("Failed to open file");
return 1;
}
fputs("Hello, World!", file);
fpos_t pos;
// Get the current file position
if (fgetpos(file, &pos) != 0) {
perror("fgetpos failed");
fclose(file);
return 1;
}
printf("Current position: %ld\n", (long)pos);
fclose(file);
return 0;
}
输出
以上代码将“Hello, World!”写入文件并获取位置,该位置为 13,因为“Hello, World!”包括空格和标点符号在内共有 13 个字符。
Current position: 13
示例 2:在文件中读取和倒回
在此示例中,它演示了如何从文件中读取数据、保存位置,然后倒回到保存的位置。
#include <stdio.h>
int main() {
FILE *file = fopen("example3.txt", "w+");
if (file == NULL) {
perror("Failed to open file");
return 1;
}
fputs("Line 1\nLine 2\nLine 3\n", file);
fpos_t pos;
// Rewind to the start of the file
rewind(file);
char buffer[20];
fgets(buffer, sizeof(buffer), file);
printf("First read: %s", buffer);
// Save the current position after reading the first line
if (fgetpos(file, &pos) != 0) {
perror("fgetpos failed");
fclose(file);
return 1;
}
fgets(buffer, sizeof(buffer), file);
printf("Second read: %s", buffer);
// Return to the saved position
if (fsetpos(file, &pos) != 0) {
perror("fsetpos failed");
fclose(file);
return 1;
}
fgets(buffer, sizeof(buffer), file);
printf("Re-read after fsetpos: %s", buffer);
fclose(file);
return 0;
}
输出
执行以上代码后,它将多行写入文件,读取第一行,保存位置,读取第二行,然后返回到保存的位置并再次读取第二行。
First read: Line 1 Second read: Line 2 Re-read after fsetpos: Line 2
广告