Connaître le résultat retournée par la commande system

pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010 - 18 mars 2006 à 17:46
pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010 - 19 mars 2006 à 22:57
Bonjour!
Je suis actuellement en train de créer un programme en C sous LINUX où je dois aller visiter un fichier texte.
Je crée une variable :
char commande = "grep "txt" monfichier.txt | wc -l";
Ensuite je veux faire :
if(system(commande)==0)
{
printf("Aucun résultat trouvé");
}
else
{
printf("Des résultats ont été trouvés");
}
Le problème à lieu à la ligne if(system(commande)==0).
Si je fais printf("%s",system(commande)); le nombre de lignes qui contient "txt" s'affiche correctement.
Par conséquent, je pense qu'on ne peut vérifier l'égalité sur la commande system.
Ai-je raison?

6 réponses

mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
18 mars 2006 à 17:55
Tu peux essayer avec un dup sur le stdout ?
tu dois pouvoir, si je ne me trompe (je ne suis pas très a l'aise avec ces concepts) récupérer le flux de la console dans un fichier par exemple, et ensuite tu n'as plus qu'à relire ce dernier pour traiter les résultats comme tu l'entend, et ainsi savoir par la même si tu as des résultats !

Mais c'est peut être compliqué pour ce que tu cherches à faire.... mais c'est la seule méthode que je vois personnelllement !

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010
19 mars 2006 à 10:09
Merci de ta réponse!

Tu veux donc dire que je dois faire de la façon suivante :

char commande = "grep "txt" monfichier.txt | wc -l >temp.txt";

Après je fais un fopen de mon fichier temp.txt. Je lis la première ligne et après je fais ma vérification.

C'est bien ce que tu voulais dire?
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
19 mars 2006 à 13:47
Ce que je voulais dire, c'est qu'il est possible de détourner le stdout
pour que les informations qui arrivent normalement à la console
arrivent autre part. Je sais que ca peut marcher par exemple pour
envoyer les infos via le réseau, mais je n'ai jamais testé l'envoi
direct vers un fichier.



Ce serait à priori une synthaxe de la sorte :






<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor">

close(1);
dup(connfd);

connfd était alors le socket que j'utilisais pour l'envoi de donées via le réseau.
Il me sufisait alors d'écrire sur stdout pour que le résultat n'aille pas sur la console, mais vers le client réseau.

Je ne peut en aucun cas promettre que c'est la bonne solution pour ne pas m'y connaitre assez en la matière.
Mais tu peut essayer de mettre ton handle fichier (si ce ne sont pas les bons termes, corrigez moi, pareil, manque d'habitude)
à la place de connfd (genre : FILE *fichier donnerai dup(fichier))
Si jamais ce n'est pas ca, j'aurais essayé de t'aidé

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010
19 mars 2006 à 21:30
Oulaaaaaaaaa !!!!
Je veux pas dire mais là ça me dépasse!!!
Me faudrait un vrai exemple mais n'oublie pas c'est du C et pas un shell.
Merci d'avance.
A+
PS : Même si tu peux pas mieux faire, dis-le.
0

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

Posez votre question
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
19 mars 2006 à 21:40
euh, déjà, si tu travail sous linux, tout étant fait en C si je ne
m'abuse, de toute manière, la sortie standard stdout est sur la
console. J'avais bien compris que tu cherchais du C. Mais j'ai testé ma
méthode et elle me renvoi une erreur de compilation car le dup que je
faisais en cours marche sur des sockets et pas sur des fichiers. Je
reste persuadé que on peut le faire d'une manière qui s'en rapproche,
je continue à chercher, mais quand j'en aurais le temps, c'est à dire
en ce moment malheureusement pas souvent. Je te conseil donc vivement
de demander à d'autres personnes pour résoudre ton problème !

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010
19 mars 2006 à 22:57
D'accord !!!
Merci de ton aide.
Essai de faire de ton mieux si tu peux trouver une solution.
Merci d'avance!
Si quelqu'un d'autre à une idée, merci de m'aider.
0
Rejoignez-nous