繁体   English   中英

IPC :: Open3如何为CHLD_IN启用自动刷新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM