【发布时间】:2020-04-17 12:15:08
【问题描述】:
我正在尝试使用cut 更改命令ping 的输出以为我获取一些必要的信息,然后将其重定向到带有bash 管道的c++ 程序。
ping google.com | cut -d " " --fields 8 | ./a.out
C++ 程序做这样的事情:
int main(){
string str;
cin >> str;
cout << "str:" << str << endl;
}
我建议,这样的命令可能有效,但它没有,执行上述命令后没有任何输出。但不使用cut 也能很好地工作。如果我只使用
ping google.com | ./a.out
我的程序确实有输出。所以我认为问题是我的 c++ 程序无法从cut 读取字符串。
如何解决?
【问题讨论】:
-
您的 C++ 程序将愉快地读取 fom
cut或任何其他通过标准输入管道输入的程序。无论您的真正问题是什么,它都不是您认为的那样,但如果没有更多信息,任何人都不太可能知道它是什么。 -
什么是“这样的东西”?我不明白你想用你的 C++ 程序做什么,以及它与上面的命令行有什么关系。
-
输出缓冲意味着
a.out只会在1-8KB的输出累积或cut退出时接收输入。 -
@ThomasSablik 标准输出在连接tty 时是行缓冲的,否则是全缓冲的。 libc 就是这样做的,因此它适用于几乎所有的 Linux 程序。见pixelbeat.org/programming/stdio_buffering。
-
@ThomasSablik 是的,
ping每行刷新其输出。我猜它有手动fflush(stdout)调用,或者使用setvbuf()更改缓冲。或者不使用stdio。