【问题标题】:linux stdout pipe issueslinux标准输出管道问题
【发布时间】:2012-09-22 08:26:12
【问题描述】:

我有一个服务器程序只是将输出日志写入 STDOUT。 我还有另一个名为“logfile”的 Perl shell 脚本,它会从 STDIN 获取数据并显示一些输出。

linux$ server |  logfile

起初日志文件有输出,但过了一会儿它停止了.. 有没有人遇到过这个问题?

【问题讨论】:

  • 你多久刷新一次标准输出?

标签: c++ linux perl pipe


【解决方案1】:

server 可能会缓冲其输出,并将其以块的形式提供给管道。 server 是 Perl 脚本吗?添加

$| = 1;

use Handle qw( );
STDOUT->autoflush(1);

禁用 STDOUT 的缓冲。 (嗯,第一个将禁用任何句柄 selected 的缓冲,但默认情况下是 STDOUT。)

【讨论】:

  • 什么while循环?听起来您正在查看错误的文件。请重新阅读我所说的内容,并注意我说的是server
  • server 是 c++ 程序,它只使用 std::cout
  • 您必须研究如何禁用该 I/O 库的缓冲。抱歉,这超出了我的专业范围。但是您应该可以使用 Google 找到答案。
  • 大家好,我明白了,当与 mysql 的连接中断时,while 循环停止。