-
disk free (df)
Bonjour,
Je dispose actuellement d'un OS uClinux sur un microcontrôleur Coldfire. Je voudrais récupérer les valeurs retournées lorsque je tape la commande "df" et les enregistrer dans des variables. Par exemple, lorsque je tape "df", le terminal m'affiche:
Total Kbytes: 2432
Free Kbytes: 208
Total nodes: 0
Free nodes: 0
Comment récupérer ces données dans une variable utilisable par un programme en C ?
Julien.
-
Bonjour.
Je dirai que tu as trois possibilités :
- Tu sauves le résultat dans un fichier. Ton application C lit ce fichier.
- Tu crées un script qui va lancer la commande df et va transmettre en tant que paramêtre le résultat à ton application C.
- Ton application C lance elle-même la commande df et récupère le résultat directement.
Pour ma part je préfère la troisième solution.
-
Je suis d'accord pour la 3eme solution, elle me parait a priori la plus approprié à ce que je souhaite faire. J'ai essayé en utilisant la command "system("df"), mais je ne fais que reporter le problème car je ne récupère pas les valeurs dans des variables. Ce que tu veux dire je suppose, c'est d'inclure la librairie df.h et de trouver la variable qui stocke ce dont j'ai besoin. Peux-tu m'éclaircir sur ce point ?
Julien.
-
La fonction system(); exécute une commande mais elle ne te renvoie pas le résultat. Et non je voulais pas dire d'intégrer df à ton application.
Il faut pouvoir lancer df un peu à la façon de system(); tout en récupérant le résultat. Pour ma part j'utilise la glib pour faire ca. Il existe des fonctions associées telle que g_spawn_command_line_sync();.
Sinon tu peux regarder du côté de la fonction popen();. Elle fait partie de la bibliothèque standard stdio.h.
-
La fonction popen() et pclose() fonctionne parfaitement. Pour ceux qui auraient un peu le même défi, voila mon code:
FILE *fp;
fp = popen("df", "r");
if (fp == NULL)
/* Handle error */;
fgets(totalMemFrame, LINE_MAX, fp);
fgets(freeMemFrame, LINE_MAX, fp);
...
Merci !
Julien.