1 #include<stdio.h> 2 3 int main() 4 { 5 FILE * fd = fopen("btoo1.c", "ab+"); 6 fpos_t p ; 7 int fp = fgetpos(fd, &p); 8 printf("bef seek: fgetpos = %ld, ftell = %d\n", p, ftell(fd)); 9 fseek(fd, 12, SEEK_SET); 10 fgetpos(fd, &p); 11 printf("bef seek: fgetpos = %ld, ftell = %d\n", p, ftell(fd)); 12 fwrite("*****", 1, 5, fd); 13 fclose(fd); 14 return 0; 15 }
测试代码如上。现象就是这样,原因未知。
解决方案:
设置临时文件,将偏移量前的内容先写到零时文件内,然后删源文件,再将零时文件重命名。