IPC :: Open3如何为CHLD_IN启用autoflush

时间:2016-12-11 10:07:29

标签: perl perl-module autoflush

IPC::Open3州的文档:

The CHLD_IN will have autoflush turned on

source code中没有提及IO::Handle::autoflush。该模块使用什么机制为CHLD_IN打开autoflush?

1 个答案:

答案 0 :(得分:2)

使用以下行禁用缓冲

 override var shouldAutorotate : Bool {
    // Lock autorotate
    return false
}

可以改写为

select((select($handles[0]{parent}), $| = 1)[0]); # unbuffer pipe

在Perl中禁用输出缓冲的传统方法是通过my $old_fh = select($handles[0]{parent}); $| = 1; select($old_fh); 变量。来自man perlvar

  
      
  • HANDLE-> autoflush(EXPR)
  •   
  • $ OUTPUT_AUTOFLUSH
  •   
  • $ |
  •   
     

如果设置为非零,则在当前所选输出通道上的每次写入或打印后立即强制刷新。默认值为0(无论系统是否真正缓冲了该通道; $ |仅告诉您在每次写入后是否已明确要求Perl进行刷新)。如果输出到终端,则STDOUT通常是线路缓冲的,否则阻塞。设置此变量主要在输出到管道或套接字时很有用,例如在rsh下运行Perl程序并希望在输出时看到输出。这对输入缓冲没有影响。请参阅getc。请参阅有关如何选择输出通道的选择。另见IO :: Handle。

     

助记符:当你想让你的烟斗滚烫时。

设置$|作用于"当前选择的输出通道"使用单参数形式select设置。