IPC::Open3的文档声明:
The CHLD_IN will have autoflush turned on但源代码中没有提到IO::Handle::autoflush。模块用于打开CHLD_IN的自动刷新的机制是什么?
发布于 2016-12-11 10:41:40
使用以下行禁用缓冲区
select((select($handles[0]{parent}), $| = 1)[0]); # unbuffer pipe可以重写为
my $old_fh = select($handles[0]{parent});
$| = 1;
select($old_fh);在Perl中禁用输出缓冲的传统方法是通过$|变量。来自man perlvar
如果设置为非零,则在当前选定的输出通道上的每次写入或打印之后立即强制刷新。缺省值为0(不管系统是否真正缓冲了通道;$|只告诉您是否在每次写完之后显式地要求Perl进行刷新)。如果输出到终端,则STDOUT通常会被行缓冲,否则将被块缓冲。在输出到管道或套接字时,例如在rsh下运行Perl程序并希望看到正在发生的输出时,设置此变量非常有用。这对输入缓冲没有影响。关于这个,见getc。参见选择如何选择输出通道。另见IO::句柄。
助记符:当你想让你的管道变热的时候。
设置$|对“当前选定的输出通道”起作用,该通道是用select的一个参数形式设置的。
https://stackoverflow.com/questions/41085039
复制相似问题