perl - 在 Perl 中从管道中读取 X 个字节
问题描述
从 Perl 的管道中读取 x 个二进制字节的最佳方法是什么?使用 sysread 仅返回 8K 字节。在继续脚本的其余部分之前,我需要从管道中读取大约 1GB 的字节。显然,我可以自己将所有 8K 块组合在一起,但我希望这样的东西已经存在,而不必自己编写代码。
解决方案
使用
sysread
仅返回 8K 字节
不太具体,它返回所有可用字节,直到提供的最大值。(如果管道中没有,它将等待一些到达。)
在继续脚本的其余部分之前,我需要从管道中读取大约 1GB 的字节。
我不确定是否有办法检查管道中等待的字节数,但没有系统具有可以容纳 1 GB 或 1 GiB 的管道。只是循环阅读。
use constant TO_READ => 1000*1000*1000; # Or 1024*1024*1024?
my $buf = '';
while (length($buf) < TO_READ) {
my $rv = sysread($fh, $buf, TO_READ-length($buf), length($buf));
defined($rv)
or die("Can't read from file: $!\n");
$rv
or die("Can't read from file: Premature EOF\n");
}
您可以轻松地使用read
. 和 和有什么不一样?read
sysread
推荐阅读
- c++ - 作为使用 `std::shared_ptr` 的给定代码,是否有任何我应该注意的潜在问题?
- mysql - 添加所有具有相同值的项目列表的最佳方法是什么
- jquery - 如何在没有 PagedList 的 Asp.Net MVC 中分页?
- node.js - 人脸 API - Person Group PUT 操作期间出现错误 404
- docker - 警告:无法从守护进程获取默认注册表端点
- ios - 物理设备已添加但未显示在调试菜单中
- pine-script - 如何在枢轴交叉或前一天高点或低点交叉发生时绘制价格标签 - 松树脚本
- python - 如何制作字典词典?
- python - 提到电报机器人时没有响应
- java - Javafx - 从 java 类更新 UI 中的进度指示器