'cut'输出重定向到 C++ 程序



我正试图使用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中的字符串。

如何修复它?

是。ping实用程序是行缓冲的(它在输出每一行之后执行fflush(stdout)(。

相反,您可以使用GNU coreutils:中的stdbuf命令将整个管道设置为使用行缓冲

stdbuf -oL -eL bash -c 'ping google.com | cut -d " " --fields 8 | ./a.out'

最新更新