[英]How does IPC::Open3 enable autoflush for CHLD_IN
IPC :: Open3的文档指出:
The CHLD_IN will have autoflush turned on
但是源代码中没有任何内容提到IO::Handle::autoflush
。 模块使用什么机制为CHLD_IN
打开自动CHLD_IN
?
使用以下行禁用缓冲
select((select($handles[0]{parent}), $| = 1)[0]); # unbuffer pipe
可以改写成
my $old_fh = select($handles[0]{parent});
$| = 1;
select($old_fh);
在Perl中禁用输出缓冲的传统方法是通过$|
变量。 来自man perlvar
:
- 处理->自动冲洗(EXPR)
- $ OUTPUT_AUTOFLUSH
- $ |
如果设置为非零,则在当前选择的输出通道上每次写入或打印后立即强制刷新。 缺省值为0(无论通道是否真正被系统缓冲; $ |仅告诉您是否在每次写操作后都明确要求Perl刷新)。 如果输出到终端,则STDOUT通常将被行缓冲,否则将被块缓冲。 设置此变量主要在输出到管道或套接字时很有用,例如在rsh下运行Perl程序并希望看到正在发生的输出时。 这对输入缓冲没有影响。 参见getc。 请参阅选择如何选择输出通道。 另请参见IO :: Handle。
助记符:当您希望管道变热时。
设置$|
对“当前选定的输出通道”起作用,该通道以select
的一个参数形式设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.