Bonjour
En C++, je cherche � r�cup�rer le r�sultat d'une commande syst�me afin de l'exploiter dans la suite de mon programme, prenons par exemple la commande "uname".
Pour des raisons de s�curit� et de robustesse je ne veux pas faire quelque chose du style
system("uname > fichier") et lire le fichier.
De m�me la commande dup2 qui permet de rediriger la sortie standard ne fonctionne qu'avec des handles de fichier pas avec des stream C++.
J'ai essay� en vain de r�diriger la sortie standard vers un stream en utilisant les m�thodes system et fork / execl /execlp mais �a ne fait qu'afficher le r�sultat de la commande sur la sortie standard et mon flot est toujours vide :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
std::ostringstream oss;
int kidstatus, deadpid;
pid_t kidpid = fork();
if (kidpid == -1) {
  std::cerr << "fork error " << errno << ", "
  << std::strerror(errno) << "\n";
  return 1;
  }
  if (kidpid == 0) {
    oss << execl("/usr/bin/uname","uname", 0); // affiche SunOS
    return 0;
   }
  // we only get here if we're the parent process.
  deadpid = waitpid(kidpid, &kidstatus, 0);
  if (deadpid == -1) {
    std::cerr << "waitpid error " << errno << ", "
    << std::strerror(errno) << "\n";
    return 1;
}
std::cout << "child result code: " << WEXITSTATUS(kidstatus)
 
cout << "oss.str()=" << oss.str() << endl;

Une suggestion??
Merci!!