int fgetpos(FILE *fp, fpos_t *pos)
int fsetpos(FILE *fp, fpos_t *pos)
1. 可以处理大于 2G 的文件
2. 调用成功时则返回 0, 错误返回非 0, errno 存放错误代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
fpos_t fpos, tmppos;
char s[256];
long pos;
if((fp = fopen("in", "aw+")) == NULL)
{
fprintf(stderr,"can't open file\n");
exit(EXIT_FAILURE);
}
fgetpos(fp, &fpos);
pos = fpos.__pos;
printf("first position: %ld\n", pos);
fputs("ABCDEFG", fp);
fgetpos(fp, &tmppos);
pos = tmppos.__pos;
printf("last position: %ld\n", pos);
if(fsetpos(fp, &fpos) == 0)
{
fgetpos(fp, &tmppos);
pos = tmppos.__pos;
printf("reset position: %ld\n", pos);
fgets(s, sizeof(s), fp);
printf("file contents: %s\n", s);
}
else
{
fprintf(stderr, "fsetpos failure.\n");
exit(EXIT_FAILURE);
}
fclose(fp);
return EXIT_SUCCESS;
}
int fsetpos(FILE *fp, fpos_t *pos)
1. 可以处理大于 2G 的文件
2. 调用成功时则返回 0, 错误返回非 0, errno 存放错误代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
fpos_t fpos, tmppos;
char s[256];
long pos;
if((fp = fopen("in", "aw+")) == NULL)
{
fprintf(stderr,"can't open file\n");
exit(EXIT_FAILURE);
}
fgetpos(fp, &fpos);
pos = fpos.__pos;
printf("first position: %ld\n", pos);
fputs("ABCDEFG", fp);
fgetpos(fp, &tmppos);
pos = tmppos.__pos;
printf("last position: %ld\n", pos);
if(fsetpos(fp, &fpos) == 0)
{
fgetpos(fp, &tmppos);
pos = tmppos.__pos;
printf("reset position: %ld\n", pos);
fgets(s, sizeof(s), fp);
printf("file contents: %s\n", s);
}
else
{
fprintf(stderr, "fsetpos failure.\n");
exit(EXIT_FAILURE);
}
fclose(fp);
return EXIT_SUCCESS;
}