2016-05-18 5 views
0

Ich habe ein Verzeichnis, dass, wenn ich einen Befehl ls laufen, ich weiß, dass es spuckt so einen Fehler wie out:cpp popen erhält ls Fehler

ls: reading directory /mydir: Input/output error 

ich erkennen können, will, dass es eine war IO-Fehler in meinem Code.

Das ist, was ich versucht habe:

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 

Die Fehlermeldung druckt auf den Bildschirm, aber ich habe nicht die Fehlermeldung erhalten, wenn sie aus dem Rohr zu lesen.

Danke,

+0

Perfekt! Vielen Dank, @antlersoft – georges

Antwort

0

umgekehrt aus dem Stream zu lesen liest den

Standardausgabe des Befehls

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

Sie sind die Standardeingabe des aufgerufenen Programms zu lesen, die leer ist. Die Fehlermeldung wird in die Standardausgabe geschrieben. Versuchen Sie, ls 2>&1 auszuführen.