ruby - 从 IO#pipe 获得的写入流的数据大小
问题描述
我正在使用IO#pipe方法,在某些时候我想知道有多少字节已经写入输出流。使用IO#tell会导致错误,这并没有多大帮助 -Errno::EINVAL: Invalid argument
它没有说明什么是无效的。
有一个简单的代码片段来演示这个问题:
read_io, write_io = IO.pipe
write_io.tell #=> #<Errno::EINVAL: Invalid argument>
有没有办法编写我自己的tell
方法?或者我做错了什么?
解决方案
irb(main):007:0> read_io, write_io = IO.pipe
=> [#<IO:fd 9>, #<IO:fd 10>]
irb(main):008:0> read_io.tell
Errno::ESPIPE: Illegal seek
from (irb):8:in `tell'
from (irb):8
from /usr/bin/irb:11:in `<main>'
irb(main):009:0> write_io.tell
Errno::ESPIPE: Illegal seek
from (irb):9:in `tell'
from (irb):9
from /usr/bin/irb:11:in `<main>'
在我的 Ruby 控制台上,它返回ESPIPE
and not EINVAL
,这是预期的,因为它是在 Unix 环境中tell
实现的,如果文件是pipe则返回。lseek
ESPIPE
read()
我们可以通过保留一个累积管道结果和write()
调用的计数器来测量写入/读取到管道的数据量。
推荐阅读
- javascript - JS过滤日期
- swift - 无法使用 AVVideoCompositionCoreAnimationTool 在视频中显示动画 CALayer
- javascript - 选中复选框时触发功能,但未选中时清除
- c# - 在c#中的文本框上显示单元格值
- wpf - 半透明颜色的动画效果很奇怪
- java - 有没有办法在 Java 语言(非本机)JVM 代理中启用“本机方法前缀”功能?
- python - Python shell 在 urlopen() 上重新启动
- c# - .Net Api 用于创建带有图表的 Word 文档
- javascript - 入门问题,在动画上用文本覆盖 Div
- python - 带有 sklearn 的 ML:KNeighborRegressor 拟合函数卡在大数据库上