本想也像lseek一样写一个测试文件大小的函数,但是最后发现这个返回值和lseek还是有点区别的,就只能 放弃了。
不过回过头来看书上给出的例子,就是用它做了一个计算文件大小的例子如下:它不能简单的只能一个句话来求出,可以看到使用了ftell,这个函数。这个可以返回指针位置。这说明这两个加一块才等于Linux系统调用的一个lseek函数了。
#include <stdio.h>
long filesize(FILE *stream);
int main()
{
FILE *stream;
stream = fopen("MYFILE.TXT", "w+");
fprintf(stream, "This is a test");
printf("Filesize of MYFILE.TXT is %ld bytes\n", filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
附上ftell:
ftell(取得文件流的读取位置) | |
相关函数
| fseek,rewind,fgetpos,fsetpos |
表头文件
| #include<stdio.h> |
定义函数
| long ftell(FILE * stream); |
函数说明
| ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。 |
返回值
| 当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。 |
错误代码
| EBADF 参数stream无效或可移动读写位置的文件流。 |
范例
| 参考fseek()。 |