【发布时间】:2017-04-26 09:15:07
【问题描述】:
IPC::Open3 的文档指出:
The CHLD_IN will have autoflush turned on
但source code 中没有提到IO::Handle::autoflush。模块使用什么机制为CHLD_IN开启自动刷新?
【问题讨论】:
标签: perl perl-module autoflush
IPC::Open3 的文档指出:
The CHLD_IN will have autoflush turned on
但source code 中没有提到IO::Handle::autoflush。模块使用什么机制为CHLD_IN开启自动刷新?
【问题讨论】:
标签: perl perl-module autoflush
以下行禁用缓冲
select((select($handles[0]{parent}), $| = 1)[0]); # unbuffer pipe
可以改写为
my $old_fh = select($handles[0]{parent});
$| = 1;
select($old_fh);
在 Perl 中禁用输出缓冲的传统方法是通过 $| 变量。来自man perlvar:
- HANDLE->autoflush(EXPR)
- $OUTPUT_AUTOFLUSH
- $|
如果设置为非零,则在当前选定的输出通道上每次写入或打印后立即强制刷新。默认值为 0(无论通道是否真正被系统缓冲;$| 只告诉您是否明确要求 Perl 在每次写入后刷新)。如果输出到终端,则 STDOUT 通常会被行缓冲,否则会被块缓冲。设置此变量主要在您输出到管道或套接字时很有用,例如当您在 rsh 下运行 Perl 程序并希望看到正在发生的输出时。这对输入缓冲没有影响。请参阅 getc 。请参阅选择以了解如何选择输出通道。另请参阅 IO::Handle。
助记符:当你想让你的管道滚烫时。
设置$|作用于“当前选择的输出通道”,该通道设置为select的单参数形式。
【讨论】:
HANDLE->autoflush(1)。