我想知道 fread 函数如何在文件中移动文件指针 .
让我们考虑以下场景:
<?php
$file=fopen(binary.txt,rb);
fread($file,0x594);
function(fread($file,0x1a8), ....); // some function w/ first argument as fread O/P
?>
代码简要概述:
它将以只读模式打开二进制文件 . 我想知道我的理解是否正确:
- 第一次调用fread函数会将 file pointer 移动到 0x594 位置 .
由于二进制文件中第一个字节的位置被认为是0,而fread函数读取的是0x594字节,那么文件指针的新位置是什么?
0x593还是0x594?
- 第二个fread函数将从前一个文件指针位置开始读取 . 那么,每次都有一个fread函数的调用,文件指针的位置是否被保留?
这意味着,在一系列fread函数调用中,每个fread函数开始从前一个fread函数设置的文件指针的位置读取字节?
在这种情况下,它将开始从位置0x594到(0x594 0x1a8)或 0x73c 读取字节?
谢谢 .
1 回答
您可以使用ftell()自行调查 . 文件指针的当前位置是文件基础结构的固有部分,PHP只是在libc / glibc的fopen / fread / etc实现之上 .
但是,考虑一下:
文件指针现在将是零位置,因为没有读取数据 .
文件指针现在将位于位置500,因为它作为前一个fread调用的一部分读取位置0-> 499(500字节) .
仍然在500位
等等...
基本上,使用ftell()来检查自己 . ftell()用于检索文件指针的CURRENT位置,因此您可以使用记住您所在的位置 . 然后你可以使用rewind(),fseek()等......将指针全部移动,然后向右跳回你原来的地方而不会丢失: