URL: https://linuxfr.org/forums/programmation-c/posts/popen-pclose Title: popen / pclose Authors: guitouu Date: 2007年06月01日T16:39:21+02:00 Tags: Score: 0 Bonjour, Je cherche à faire la chose suivante en C++/C : - executer une commande depuis mon code - recuperer le code de retour - recuperer stderr d'un coté - recuperer stdout d'un autre coté Pour le moment j'ai trouvé une solution avec popen+close qui me permet de recuperer le code de retour, en revanche, pour stderr et stdout, je ne vois pas comment les recuperer separement. PS : on oubli le cat dans 2 fichiers, question d'optimisation PS : via l'API java, on peut récuperer code de retour, stdout et stderr separement, donc c'est forcement possible en C, mais comment ... ? Voila "en gros" mon code pour le moment : FILE* pipe = popen(command.c_str(), "r"); if ( 0 == pipe ) { £spaces£ £/spaces£// popen failed, log the error £spaces£ £/spaces£return -1; } // Read pipe until it is closed by the child process // store data in the output variable char tmp[1024]; string output = ""; while ( 0 != fgets(tmp, 1024, pipe) ) { £spaces£ £/spaces£output.append(tmp); } // wait for the end of the child process int status = pclose(pipe); // check status std::cout << "status: " << status << std::endl; if ( (-1 == status) and (ECHILD == errno) ) { £spaces£ £/spaces£std::cout << "pclose failled " << std::endl; £spaces£ £/spaces£return -1; } else if ( false == WIFEXITED(status)) { £spaces£ £/spaces£std::cout << "command exit with error " << std::endl; £spaces£ £/spaces£return -1; } else { £spaces£ £/spaces£std::cout << "command exit ok" << std::endl; £spaces£ £/spaces£return -1; } Je ne suis pas du tout sur pour le "WIFEXITED(status) == false". Peut etre qu'il faut seulement mettre "status == -1" ? Merci