我有两个C ++程序:一个用于向stdout输出消息,另一个用于监听stdin并打印流中的所有内容。它们分别命名为out
和in
。
out.cpp:
#include <iostream>
using namespace std;
int main() {
cout<<"HELLO";
usleep(1000000);
cout<<"HELLO";
}
in.cpp:
#include <iostream>
using namespace std;
int main() {
string input;
while(cin>>input) {
cout<<input;
}
}
目前的情况是,将数据从out
传输到in
等待两秒钟,然后打印HELLOHELLO
:
~$ ./out | ./in
#...two seconds later:
~$ ./out | ./in
HELLOHELLO~$
我确定这是一个简单的问题,但是in
是否可以打印每个HELLO
,因为out
会打印它?我读过piped commands run concurrently,但我必须对这种特殊情况误解这个概念。期望的表现是:
~$ ./out | ./in
#...one second later:
~$ ./out | ./in
HELLO
#...one second after that:
~$ ./out | ./in
HELLOHELLO~$
答案 0 :(得分:2)
这里有两个问题。
第一个是输出缓冲。你需要flush the output stream。
可能最简单的方法是cout.flush()
。
第二个是字符串阅读读取整个单词,而你只输出一个,暂停之间。
您需要切换到基于字符的输入,或在单词之间放置分隔符。
基于字符的输入看起来像这样
int main() {
char input;
while(cin>>input) {
cout<<input;
}
}
添加分隔符如下所示:
int main() {
cout<<"HELLO";
cout<<" ";
usleep(1000000);
cout<<"HELLO";
}
请注意额外的空间。