在我的控制台命令中,我一直使用readline
,但今天我遇到了fread
和fgets
函数,我的问题是:使用这两种方法有什么区别:
// first
$inputLine = readline();
// second
$inputLine = fgets(STDIN);
他们两个的功能基本一样,不是吗?
readline()默认从STDIN读取输入,而fgets()可以从任何资源中读取。此外,readline()的执行时间比fgets()长。
fgets比readline要快得多。我不太清楚为什么,但我可以给你一些基准测试。
我经常参与codeforces.com上的问题解决。在其中一个问题上,我在使用PHP解决时遇到了时间限制问题,我当时正在使用readline,解决方案的时间超过了2秒。当我用fgets替换readline时,解决时间只有400毫秒。
所以fgets非常快。
来自readline文档:
readline函数实现了与GNU Readline库的接口。这些函数提供可编辑的命令行。例如,Bash允许您使用箭头键插入字符或滚动命令历史记录。
readline
接受一个参数,即$prompt
字符串,并为您修剪换行符。此外,扩展函数具有类似于bash的命令历史记录,可以让您使用箭头键滚动以前的条目,完成等功能。正如其他人在之前的答案中指出的那样,附加功能确实会增加一些开销,因此可能会更慢。
fgets
比较基本,只是从文件指针获取输入。
我能想到的唯一可能的区别就是readline()
不带参数,只能默认从STDIN
读取输入,而fgets()
可以从任何resource
读取。因此,换句话说,readline()
是fgets
的同义词,具有第一个预定义参数,例如fprintf()
和printf()
。
考虑以下内容:
fprintf(STDOUT, "hello!");
printf("hello!);
这在 PHP 标准库中非常常见。
readline()
函数真的不熟悉……我只用过fgets()
;) 你可以编写一个基准测试,看看它们是否真的有很大的区别。否则,可能只是取决于你喜欢哪个。 - IncredibleHat