开发者社区> 问答> 正文

fopen打开一个文件,是否已经将文件内容读取到内存里了:报错

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;
}

展开
收起
kun坤 2020-06-08 19:19:38 1266 0
1 条回答
写回答
取消 提交回答
  • fopen当然没有啦,只是持有一个句柄。fgets是逐行读进内存,处理上G文件都可以######听君一席话,深度二十年书###### 有读和写缓存的, 大小记不清了, 应该是2K或4K,所以写的时候还有个fflush函数。 ######8192######对读取大文件应该没有什么影响, fseek根据需要移动到需要读的地方###### 大文件应该用fseek
    fgets应该也是可以的 ######fopen并未将文件读入内存。######貌似只是建立指针######获得文件描述符######有可能操作系统就开始预读了,但是上层的程序不会知道的###### 不是的。当进行读取的时候可能才会读取,并且缓冲区也是有空间限制的。 ###### 最近正好也在看文件操作这块:
        fopen是建立进程与文件之间的连接,这个连接就是常说的文件描述符,这个系统调用并不会将文件内容读到内存中。读取操作是由系统调用read将文件描述符指定的文件中的内容读到内存空间中去。 ######明显没有

    2020-06-08 19:19:58
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
内存取证与IaaS云平台恶意行 为的安全监控 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载
低代码开发师(初级)实战教程 立即下载