Recuperer le resultat des unix commandes en c

cs_gabana Messages postés 1 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 29 mars 2004 - 29 mars 2004 à 21:32
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 31 mars 2004 à 07:52
Bonjour /Bonsoir,

J'aimerai savoir comment executer les commandes linux ( ps, w, vmstat et pstat) et recuperer le resultat des commandes en c.

Merci d'avance.

8 réponses

Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
29 mars 2004 à 21:42
system dans stdlib.h
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 mars 2004 à 22:46
execl dans unistd.h je crois, POSIX C
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
29 mars 2004 à 23:07
Attention execl ne se contente pas d'appeler une commande
mais écrase le processus courant par la commande appelée.
system attend le retour de la commande.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
30 mars 2004 à 17:52
desole, ma reponse est incomplete

pour lancer puis recuperer le resultat je suggere fork + exec + pipe pere-fils

Hylvenir ==> comment tu fait pour recupere le stdout d'un programme lancé avec system ? sans faire de
system( "prog > fichier" );
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
30 mars 2004 à 18:06
Ok, j'ai mal interprété la demande original.
le résultat ne correspond pas au $? sous
mais à ce qui est affiché.

popen

// C'est pas très beau, mais le C est moi on est faché ;-)
#include <stdio.h>

int main() {
FILE* fileOut = popen( "ls *.cpp", "r" );

char line[512];
while( fgets( line, 512, fileOut ) )
printf( "[%s]", line );

fclose( fileOut );
}
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
30 mars 2004 à 18:54
ca a l'air pas mal ca, mais ca passe bien par un fichier, meme temporaire ?

ps: quand tu compile ce programme (sans return 0; a la fin) avec gcc, c'est quoi son code retour?
en ansi c il est obligatoire il me semble ??
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
30 mars 2004 à 20:57
Pour le fichier temporaire, ce n'est pas sûr du tout
plutôt par des pipes ( qui sont peut être implémentés
par des fichiers temporaires mais je ne pais)

Honnêtement, je ne suis pas un spécialiste du C.
Il faudrait peut être mettre un return 0;
// par défaut en C++ depuis le temps que je te le répète ;-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
31 mars 2004 à 07:52
ben moi aussi ca m'arrive de le repeter, seulement si moi je le met qd meme c parce que je code sous vc++ 6.0 et la il est imperatif de le mettre

c'est pour ca d'ailleur que je te demande de verifier avec gcc (compile avec l'option -ansi)
0
Rejoignez-nous