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!!
Partager