首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPC::Open3如何为CHLD_IN启用自动刷新

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

Stack Overflow用户
提问于 2016-12-11 10:07:28
回答 1查看 139关注 0票数 1

IPC::Open3的文档声明:

代码语言:javascript
复制
The CHLD_IN will have autoflush turned on

源代码中没有提到IO::Handle::autoflush。模块用于打开CHLD_IN的自动刷新的机制是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-11 10:41:40

使用以下行禁用缓冲区

代码语言:javascript
复制
select((select($handles[0]{parent}), $| = 1)[0]); # unbuffer pipe

可以重写为

代码语言:javascript
复制
my $old_fh = select($handles[0]{parent});
$| = 1;
select($old_fh);

在Perl中禁用输出缓冲的传统方法是通过$|变量。来自man perlvar

  • 手柄->自动冲洗(费用)
  • $OUTPUT_AUTOFLUSH
  • $|

如果设置为非零,则在当前选定的输出通道上的每次写入或打印之后立即强制刷新。缺省值为0(不管系统是否真正缓冲了通道;$|只告诉您是否在每次写完之后显式地要求Perl进行刷新)。如果输出到终端,则STDOUT通常会被行缓冲,否则将被块缓冲。在输出到管道或套接字时,例如在rsh下运行Perl程序并希望看到正在发生的输出时,设置此变量非常有用。这对输入缓冲没有影响。关于这个,见getc。参见选择如何选择输出通道。另见IO::句柄。

助记符:当你想让你的管道变热的时候。

设置$|对“当前选定的输出通道”起作用,该通道是用select的一个参数形式设置的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41085039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档