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 01/02/2008, à 20:25

volkukan

Executer et récupérer les donné d'un programme en C

Salut,
Jsui un peu déconcerté car j'arrive pas à  trouver les informations que je veux, j'aimerais utiliser les programmes gdb, grep ou autre à  partir de mon code C.

Je sais qu'il faut utiliser la fonction system() du fichier stdlib.h, cela fonctionne mais comment faire pour récupérer les donnée aprés cette commande.

exemple :

#include <stdlib.h>
int main(void)
{
return system("ls");
}

Il y a encore bcp de chose a faire, je profiterai de ce post pour developper ce programme qui à  pour but d'inspecter les codes sources.
Merci d'avance

Hors ligne

#2 Le 01/02/2008, à 21:19

volkukan

Re : Executer et récupérer les donné d'un programme en C

J'ai trouver une piste graçe à la fonction popen() de stdio,
Donc j'arrive à récupérer le flux de sortie en tout cas pour les chose simple comme la commande ls, mais quand j'essai avec la commande gdb sa coince et c'est d'ailleur normal.
Je crois que si je veux utiliser gdb il faut que je creer un thread mais comment faire pour communiquer avec lui???

Voici un exemple d'utilisation de popen

#include <stdio.h>
#define Taille_MAX 200

int main(void)
{
  FILE *fichier;
  char ligne[Taille_MAX];			
   
  fichier = popen("gdb ./blender", "r");		

//Je vais lire dans le fichier chaque ligne que je mets dans le tableau			
  while (fgets(ligne, Taille_MAX, fichier))
  {
    printf("%s", ligne);
  }
  pclose(fichier);
}

Hors ligne

#3 Le 02/02/2008, à 12:26

Aurel34

Re : Executer et récupérer les donné d'un programme en C

volkukan a écrit :

J'ai trouver une piste graçe à  la fonction popen() de stdio,
Donc j'arrive à  récupérer le flux de sortie en tout cas pour les chose simple comme la commande ls, mais quand j'essai avec la commande gdb sa coince et c'est d'ailleur normal.
Je crois que si je veux utiliser gdb il faut que je creer un thread mais comment faire pour communiquer avec lui???

popen crée déjà  un processus (pas un thread) et crée u pipe pour communiquer avec. Par contre là  gdb va attendre que tu lui envoie une commande, et toi tu attends quelque chose sur le flux... En plus pclose va attendre que le programme se termine...

bn pour y remédier, deux choses à  faire:
1) tu ouvres ton flux (popen) en "rw" et non en "r" pour pouvoir envoyer des commandes à  gdb
2) tu lui envoies les dites commandes genre fprintf(fichier,"quit\n")
3) et tu lis ensuite le résultat

#4 Le 02/02/2008, à 14:08

volkukan

Re : Executer et récupérer les donné d'un programme en C

Merci pour le conseil, en attendant j'ai trouver un inspecteur de code source génial du nom de Kscope, jamais entendu parler et c'est vraiment dommage voir incompréhensible qu'il n'y ai pas mention de ce logiciel dans le forum (sauf erreur de ma part)

Concernant le code, je compte bien le créer histoire de m'entrainer à codé en C sous Unix.
Cependant au lieu de chercher des heures sur les forums j'aimerais bien savoir si il existe des bouquin (des bibles) sur le language C de niveau intermediaire et avancer car tout les bouquins ce ressemble et aucun ne developpe serieusement des sujets comme les thread ou autre façon d'organiser le code pour des projets ambitieu. Je prend même les bouquins en anglais si il le faut.:D

Dernière modification par volkukan (Le 02/02/2008, à 14:09)

Hors ligne

#5 Le 02/02/2008, à 14:54

Aurel34

Re : Executer et récupérer les donné d'un programme en C

volkukan a écrit :

Merci pour le conseil, en attendant j'ai trouver un inspecteur de code source génial du nom de Kscope, jamais entendu parler et c'est vraiment dommage voir incompréhensible qu'il n'y ai pas mention de ce logiciel dans le forum (sauf erreur de ma part)

Kscope utilise cscope qui est un classique smile

Concernant le code, je compte bien le créer histoire de m'entrainer à codé en C sous Unix.
Cependant au lieu de chercher des heures sur les forums j'aimerais bien savoir si il existe des bouquin (des bibles) sur le language C de niveau intermediaire et avancer

sur le C ou sur le dev Unix ? (ce n'est pas tout à fait la même chose). Au niveau bible tu as "Programmation en C sous Linux" qui est une bible (niveau contenu ET épaisseur...).

car tout les bouquins ce ressemble et aucun ne developpe serieusement des sujets comme les thread ou autre façon d'organiser le code pour des projets ambitieu.

pour ça je pense que "apt-get source" est ton ami. Tu n'apprendras jamais mieux (à partir d'un certain niveau) qu'en regardant comment font les autres tout en lisant les pages man pour bien comprendre.

Je prend même les bouquins en anglais si il le faut.:D

#6 Le 02/02/2008, à 15:06

volkukan

Re : Executer et récupérer les donné d'un programme en C

Ok, jcomprend mieu pourquoi le niveau de la doc se fait rare quand il sagit d'un niveau avancé.
En ce moment quand je regard le code source je vois plein d'allusion sur des handlers et des handle qu'est ce que je dois comprendre.
Un handlers est une routine chargé de la gestion d'un processus et un handle et une quelque chose qui manipule, mais  comment faire pour manipuler des fenetre par exemple avec ça?

Hors ligne

#7 Le 03/02/2008, à 11:11

Aurel34

Re : Executer et récupérer les donné d'un programme en C

volkukan a écrit :

Ok, jcomprend mieu pourquoi le niveau de la doc se fait rare quand il sagit d'un niveau avancé.
En ce moment quand je regard le code source je vois plein d'allusion sur des handlers et des handle qu'est ce que je dois comprendre.
Un handlers est une routine chargé de la gestion d'un processus et un handle et une quelque chose qui manipule, mais  comment faire pour manipuler des fenetre par exemple avec ça?

oula j'ai l'impression que tu mélange des trucs smile

le "handle" ça désigne (en général, après si tu pouvais être plus précis a aiderait) un genre de pointeur. Par exemple le handle d'une fenêtre ça va être un numéro associé à  cette fenêre dans le gestionnaire de fenêtre (et encore, c'est plutà´t un terme windows, vu que sous X on parle plutà´t de "window ID)".

un "handler" ça désigne (en général toujours) une fonction destinée à  gérer un évênement (en français c'est un "gestionnaire"). Genre je clique sur un bouton et j'appelle la fonction correspondante. J'envoie un signal et ça lance une fonction du "signal handler", etc. etc.

si tu veux quelque chose de plus précis mets un pointeur sur le code en question wink

#8 Le 03/02/2008, à 12:40

volkukan

Re : Executer et récupérer les donné d'un programme en C

Tout de suite sa devient plus claire:lol:
Maintenant je remarque quelque chose que je ne pensé pas possible, dans mon code source que j'analyse je vois que parfois la boucle for est utilsé de manière totalement farfelu.

Exemple: 
for(; ; ){......}
ou bien
for(;sa;sa->next){.......}

Je n'ais jamais vus ça auparavant à croire que l'exploitation des codes sources revele d'incroyable surprise hmm

Hors ligne

#9 Le 03/02/2008, à 13:19

telliam

Re : Executer et récupérer les donné d'un programme en C

c'est loin d'etre farfelu!
la syntaxe du for c'est : for(instruction_init;condition;instruction_fin_de_bloc)
tu px tres bien ne pas avoir d'instruction_init ou mm de condition de sortie si tu vx faire une boucle infini.
Tu px mm mettre plusieurs instruction_init séparés par des ,


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#10 Le 03/02/2008, à 16:38

Aurel34

Re : Executer et récupérer les donné d'un programme en C

en effet "for(;;)" est l'équivalent de "while(1)": ça crée une boucle infinie.

J'avais même lu que le for était mieux car avec while(1) tu fais un test à  chaque itération... enfin faudrait voir le code généré, parce que je pense qu'un compilo moderne doit savoir otpimiser ça

#11 Le 03/02/2008, à 16:42

$Gaël$

Re : Executer et récupérer les donné d'un programme en C

telliam a écrit :

c'est loin d'etre farfelu!
la syntaxe du for c'est : for(instruction_init;condition;instruction_fin_de_bloc)
tu px tres bien ne pas avoir d'instruction_init ou mm de condition de sortie si tu vx faire une boucle infini.
Tu px mm mettre plusieurs instruction_init séparés par des ,

On sent le prof de C piqué au vif tongue


Ubuntu is an ancient african word meaning : "I can't configure Debian".

Hors ligne

#12 Le 03/02/2008, à 19:18

telliam

Re : Executer et récupérer les donné d'un programme en C

$Gaà«l$ a écrit :
telliam a écrit :

c'est loin d'etre farfelu!
la syntaxe du for c'est : for(instruction_init;condition;instruction_fin_de_bloc)
tu px tres bien ne pas avoir d'instruction_init ou mm de condition de sortie si tu vx faire une boucle infini.
Tu px mm mettre plusieurs instruction_init séparés par des ,

On sent le prof de C piqué au vif tongue

non, je suis pas piqué au vif, mais qd on demande des bouquins de niveau intermédiaire c'est bien de connaitre les bases du langage.
Et je ne suis pas prof wink


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#13 Le 04/02/2008, à 13:48

Dyrg

Re : Executer et récupérer les donné d'un programme en C

Pour ce qui est de la doc C/C++ sous Linux, j'ai trouve ca: http://linux.developpez.com/cours/alp/

Pour le problème originel du post, tu peux faire ça avec des pipe/fork/appel system(au choix)/dup

1) Tu crées 1 ou 2 pairs de pipe selon que tu veuilles aller simple ou l'aller/retour.
2) tu fork
3) si c'est le fils :
-tu fermes le descripteur vers stdin/stdout que tu remplaces vers les pipes(attention au sens des pipes), tu fermes aussi les cotes de pipe inutiles
-tu exécutes ta commande, ses "stdin/stdout" seront redirigés vers les pipes.
4) si c'est le père, tu fermes les cotes de pipe inutiles et tu te sers des restants en lecture/écriture.

C'est très vague, c'est fait exprès, ça te laissera un peu chercher. J'espère quand même ne pas m'être tromper.

Hors ligne

#14 Le 24/10/2010, à 21:53

chaibi

Re : Executer et récupérer les donné d'un programme en C

programmer une commande qui permet de copier un ficher dans une répertoire

Hors ligne

#15 Le 24/10/2010, à 21:54

chaibi

Re : Executer et récupérer les donné d'un programme en C

programmer une commande qui permet de renommer un fichier

Hors ligne

#16 Le 24/10/2010, à 21:58

chaibi

Re : Executer et récupérer les donné d'un programme en C

chaibi a écrit :

programmer une commande qui permet de renommer un fichier

Hors ligne