首页 > 解决方案 > 'cut' 输出重定向到 C++ 程序

问题描述

我正在尝试更改命令的输出,ping以便cut为我获取一些必要的信息,然后将其重定向到带有 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++bashpipe

解决方案


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

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

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

推荐阅读