《UNIX环境高级编程》笔记--定位流
有三种方法可以定位流。
1.ftell函数和fseek函数这两个函数自V7依赖就存在了。但是它们假定文件的位置可以存放在一个长整型中。函数声明如下:#include <stdio.h>int main(void){ FILE* fp; int result; int c; fpos_t pos1,pos2; if((fp = fopen("a.txt", "r+")) == NULL){ result = -1; perror("fopen"); goto FINALLY; } if((c = fgetc(fp)) != -1){ printf("read c:%c\n",c); } if((c = fgetc(fp)) != -1){ printf("read c:%c\n",c); } if(fgetpos(fp,&pos1) != 0){ result = -1; perror("fgetpos"); goto FINALLY; } printf("position:%ld\n",pos1); if((c = fgetc(fp)) != -1){ printf("read c:%c\n",c); } if((c = fgetc(fp)) != -1){ printf("read c:%c\n",c); } if(fgetpos(fp,&pos2) != 0){ result = -1; perror("fgetpos"); goto FINALLY; } printf("position:%ld\n",pos2); if(fsetpos(fp, &pos1) != 0){ result = -1; perror("fsetpos"); goto FINALLY; } if(fgetpos(fp,&pos2) != 0){ result = -1; perror("fgetpos"); goto FINALLY; } printf("position:%ld\n",pos2);FINALLY: if(fp != NULL){ fclose(fp); }return result;}运行结果:yan@yan-vm:~/apue$ cat a.txt
abcdefghijklmnopqrstuvwxyz
yan@yan-vm:~/apue$ ./a.out
read c:a
read c:b
position:2
read c:c
read c:d
position:4
position:2