我希望这是一个基本问题,但我一直无法找到答案。
我正在用 C++ 构建一个 Web 服务器,为了帮助我在系统运行时对其进行可视化,我正在构建一个单独的程序来进行可视化。Web 服务器将通过将语句打印到通过管道传输到可视化器的标准输出来通知可视化器其当前状态,这将解析输入并呈现整个系统的漂亮示意图以及各种统计信息。可视化器将用 Python 编写。
为了检查我是否了解管道的工作原理,我创建了两个简单的程序:
#include <iostream>
using namespace std;
int main() {
cout << "Hello world!\n";
return 0;
}
, 和
#include <iostream>
using namespace std;
int main() {
char buf[128];
while (!cin.eof()) {
cin.getline(buf, 128, '\n');
cout << "Received line: " << buf << "\n";
}
return 0;
}
当我执行命令时,这按预期工作
./one | ./two
但是,当我像这样运行我的网络服务器时:
./aril | ./two
我根本没有输出。
自行运行服务器会产生如下输出:
Spawning handlers
Waiting for HTTP clients
Server: got connection from 127.0.0.1, port 52168
Connection timed out
(显然这实际上不是我将传递给可视化器的那种输出——它需要更容易解析的语法)。
可能相关信息:
Web 服务器分为两个进程:aril 和 arild。aril 以 root 权限运行,而 arild 没有。两个进程都使用 std::cout 打印到标准输出。
我想不出任何为什么这不起作用的原因。
编辑:事实证明,解决方案只是显式刷新输出。应该是我真正尝试的第一件事..