C ++ fgets无法读取popen的所有输出

时间:2013-12-18 05:38:44

标签: c++ linux popen fgets

在我的代码中,我使用popen和cmd' iostat -xk 2 2'。通常,iostat cmd将向stdout输出一个报告,并在间隔2秒内休眠,然后将另一个报告输出到stdout。

当我使用fgets从popen管道读取时,奇怪的是:我只收到第一份报告。 fgets挂在那里,我从未在2秒钟后收到第二份报告。我将函数fgets更改为fgetc但它没有帮助。

这是我的C ++代码:

string iostatCMD = string("iostat -xk 2 2 ");
FILE *iostatFile = popen(iostatCMD.c_str(), "r");

int fd = fileno(iostatFile);
string readall;
while(!feof(iostatFile))
{
    char buffer[128];
    if (fgets(buffer, 128, iostatFile) != NULL)
    {
        cout <<buffer;
        readall += buffer;
    }
}
cout <<"readall = " <<readall <<endl;

我尝试使用Python。它与popen一起工作得非常好,我得到iostat的两份报告而且没有挂起:

subprocess.Popen('iostat -xk 2 2', shell=True, stdout=subprocess.PIPE).communicate()[0];

所以我的问题是如何在C ++中继续读取popen管道的所有输出?

0 个答案:

没有答案