看到一些代码中分配内存是这样的
fseek(fp, 0, SEEK_END);
len = ftell(fp);
buf = (u8 *)malloc(len);
为什么要先定位到文件尾再取得文件的大小呢?不直接len = ftell(fp);
------解决方案--------------------------------------------------------
直接len = ftell(fp);的话fp会在文件头
------解决方案--------------------------------------------------------
ftell
(PHP 3, PHP 4, PHP 5)
ftell -- 返回文件指针读/写的位置
说明
int ftell ( resource handle )
返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量。
如果出错,返回 FALSE。
文件指针必须是有效的,且必须指向一个通过 fopen() 或 popen() 成功打开的文件。 在附加模式(加参数 "a" 打开文件)中 ftell() 会返回未定义错误。
例子 1. ftell() 例子
<?php
// 打开文件并读些数据
$fp = fopen("/etc/passwd", "r");
$data = fgets($fp, 12);
// 现在指针到哪里了?
echo ftell($fp); // 11
fclose($fp);
?>
http://php.cn/php/function.ftell