cpp popen得到ls错误

时间:2016-05-18 17:57:18

标签: c++ popen ls

我有一个目录,当我运行ls命令时,我知道它会像这样吐出错误:

ls: reading directory /mydir: Input/output error

我希望能够检测到我的代码中存在IO错误。

这就是我尝试过的:

void readLs(const std::string& name)
{
    stringstream ss;
    ss << "ls " << name;
    FILE* apipe = popen(ss.str().c_str(), "r");
    if(apipe == NULL)
    {
            cout << "Error opening popen" << endl;
            return;
    }
    char line[256];
    cout << __FILE__ << " " << __LINE__ << endl; //This is line 46
    while (  fgets( line, 256 , apipe) )
    {
            string temp(line);
            cout << "This is line: " << temp << endl;
            memset(line, 0, 256);
    }
    cout << __FILE__ << " " << __LINE__ << endl; //This is line 53
    pclose(apipe);
}


test.cpp 46
ls: reading directory /mydir: Input/output error
test.cpp 53

错误消息打印到屏幕,但是从管道读取时我没有收到错误消息。

谢谢,

1 个答案:

答案 0 :(得分:0)

  

相反,从流中读取会读取命令          标准输出

http://man7.org/linux/man-pages/man3/popen.3.html

您正在读取被调用程序的标准输入,该输入为空。错误消息将写入标准输出。尝试执行data={this.props.datasets[0]} data={this.props.datasets[1]}