fopen打开一个文件,是否已经将文件内容读取到内存里了
比如文件超大,好几个G,下面的代码是逐行读进内存,还是fopen后 就直接全文件读进内存了?
function searchText($file, $keyword) { $result = array(); if (!$fp = fopen($file, "r")) { die("Cannot open file $file"); } while ($line = fgets($fp)) { if (preg_match("/$keyword/i", $line)) $result[] = $line; } return $result; }
fopen当然没有啦,只是持有一个句柄。fgets是逐行读进内存,处理上G文件都可以######听君一席话,深度二十年书###### 有读和写缓存的, 大小记不清了, 应该是2K或4K,所以写的时候还有个fflush函数。 ######8192######对读取大文件应该没有什么影响, fseek根据需要移动到需要读的地方###### 大文件应该用fseek
fgets应该也是可以的 ######fopen并未将文件读入内存。######貌似只是建立指针######获得文件描述符######有可能操作系统就开始预读了,但是上层的程序不会知道的###### 不是的。当进行读取的时候可能才会读取,并且缓冲区也是有空间限制的。 ###### 最近正好也在看文件操作这块:
fopen是建立进程与文件之间的连接,这个连接就是常说的文件描述符,这个系统调用并不会将文件内容读到内存中。读取操作是由系统调用read将文件描述符指定的文件中的内容读到内存空间中去。 ######明显没有
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。