read sysread 具有非常相似的文档。两者之间有什么区别?

最佳答案

关于 read :

  • read支持PerlIO层。
  • read适用于任何Perl文件句柄[1]。
  • read缓冲区。
  • read以固定大小的8 KiB [2]块从系统中获取数据。
  • 如果可用的数据少于请求的数量,则
  • read可能会阻塞[3]。

  • 关于 sysread :
  • sysread不支持PerlIO层(这意味着它需要原始的又名二进制句柄)。
  • sysread仅适用于映射到系统文件句柄/描述符的Perl文件句柄[4]。
  • sysread不缓冲。
  • sysread执行单个系统调用。
  • sysread如果有数据可以返回,则立即返回,即使数据量小于请求的量。

  • 总结和结论:
  • read可与任何Perl文件句柄一起使用,而sysread限于映射到系统文件句柄/描述符的Perl文件句柄。
  • read不兼容 select [5],而sysread不兼容select
  • read可以为您执行解码,而sysread要求您自己进行解码。
  • 对于很小的读取,
  • read应该更快,而对于很大的读取,sysread应该更快。


  • 笔记:
  • 这些包括,例如,绑定(bind)文件句柄和使用open(my $fh, '<', \$var)创建的文件句柄。
  • 在5.14之前,Perl读取4 KiB块。从5.14开始,构建perl时可以配置块的大小,默认值为8 KiB。
  • 以我的经验,从纯文件中读取时,read将准确返回请求的数量(如果可能),但是从管道中读取时,返回的数量可能更少。这些结果绝不能保证。
  • fileno 为此返回非负数。这些包括,例如,从纯文件,管道和套接字读取的句柄,但是[1]中没有提到的那些句柄。
  • 我指的是IO::Select调用的4参数。
  • 关于perl - `read`和 `sysread`有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36315124/

    10-11 08:17