Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/08/2020, à 17:21

lanfust

[Résolu] Infos affichées dans le terminal et les passer en c++

Bonjour,

Je cherche une solution pour récupérer des données lancées par une commande dans le terminal et les transférer dans un programme en c++ (si c'est possible !)
Par exemple dans un programme c++ je lance par

system("df -aH | grep /media");

et j'obtiens dans la console

/dev/sdb1          1,1T     30G  971G   3% /media/duncan/PGM
/dev/sdc1          1,1T    139G  862G  14% /media/duncan/Android
/dev/sdd1          1,1T     80G  921G   8% /media/duncan/Windows
/dev/sde1          1,1T     15G  986G   2% /media/duncan/Video
/dev/sdf1           16G    2,8G   13G  18% /media/duncan/UBUNTU2004

Si possible merci de m'indiquer une piste car pour le moment je ne sais même pas si c'est réalisable

Dernière modification par lanfust (Le 02/09/2020, à 15:10)


Dual boot Windows 11 / Ubuntu 22.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable

Hors ligne

#2 Le 26/08/2020, à 19:44

lann

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

Une façon de faire serait de rediriger la sortie de la commande vers un fichier que ton programme serait en attente de lecture

Après, tu peux également lancé une commande directement dans le code avec system : http://www.cplusplus.com/reference/cstdlib/system/

Hors ligne

#3 Le 27/08/2020, à 07:21

lanfust

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

lann a écrit :

Une façon de faire serait de rediriger la sortie de la commande vers un fichier que ton programme serait en attente de lecture

Après, tu peux également lancé une commande directement dans le code avec system : http://www.cplusplus.com/reference/cstdlib/system/


Ok merci je vais explorer cette piste.


Dual boot Windows 11 / Ubuntu 22.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable

Hors ligne

#4 Le 27/08/2020, à 08:09

kamaris

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

gedit fait ça, tu peux jeter un œil au code, ça doit être là : https://gitlab.gnome.org/GNOME/gedit/-/ … app.c#L324
C'est du C donc tu peux au moins t'en inspirer.

Hors ligne

#5 Le 27/08/2020, à 08:12

Watael

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

salut,

ce n'est probablement pas la meilleure façon de faire; en tout cas, en shell on évite le plus possible le recours aux fichiers temporaires.
je ne connais pas le C(++), mais je serais surpris qu'il ne soit pas possible de stocker le résultat en mémoire, plus ou moins de la même manière qu'est lu un fichier.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 27/08/2020, à 12:53

kamaris

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

Je précise au cas où : quand je dis « gedit fait ça », je veux dire qu'il sait lire depuis l'entrée standard, pas qu'il le fait via un fichier temporaire.

Hors ligne

#7 Le 27/08/2020, à 12:57

Watael

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

salut kamaris,
nos messages ce sont croisés, je ne répondais pas à ton intervention, mais à celle de lann

lann a écrit :

Une façon de faire serait de rediriger la sortie de la commande vers un fichier que ton programme serait en attente de lecture


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 27/08/2020, à 13:14

kamaris

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

Salut Watael,

Oui je m'en doutais, mais j'ai préféré préciser pour éviter toute confusion wink

Hors ligne

#9 Le 27/08/2020, à 13:26

grigouille

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

Ceci peut-être :

man popen

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#10 Le 02/09/2020, à 15:06

lanfust

Re : [Résolu] Infos affichées dans le terminal et les passer en c++

Merci pour vos conseils
J'ai pris le temps de voir comment faire
La solution la plus efficace pour moi est de passer avec popen


Ce petit programme fait ce que je cherche

#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

string getPopen(string cmd){

    string data;
    FILE *stream;
    const int max_buffer = cmd.size();
    char buffer[max_buffer];

    stream = popen(cmd.c_str(), "r");

    if(stream){

        while (!feof(stream))
        if(fgets(buffer, max_buffer, stream) !=NULL) data.append(buffer);
        pclose(stream);

    }
    return data;
}

int main()
{

   string df("df -ah | grep /dev/sd 2>&1");
   string sortie(getPopen(df));
   cout << "Sortie = " << endl;
   cout << sortie << endl;

}

Dual boot Windows 11 / Ubuntu 22.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable

Hors ligne