Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1342 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] Faire marcher pipe et fork conjointement ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Faire marcher pipe et fork conjointement ?

n°347563
Deadog
Dain Bramaged
Posté le 30-03-2003 à 16:32:11  profilanswer
 

voila, j'arrive pas à saisir comment faire marcher pipe avec fork :/
 
mon but est d'éxécuter un prog, attendre ke ce prog ai fini pour reprendre la main et surtout, récupérer la sortie standard du prog lancé !
 
j'ai essaye popen, ça marche bien :) mais ça bouffe trop de ressource cpu :( (j'ai besoin de faire cela très régulièrement)


Message édité par Deadog le 30-03-2003 à 16:32:33
mood
Publicité
Posté le 30-03-2003 à 16:32:11  profilanswer
 

n°347624
lorill
Posté le 30-03-2003 à 18:09:51  profilanswer
 

1 : tu fais un dup de stdout (1).
2 : tu le ferme
3 : tu ouvres le pipe (les premiers descripteurs de fichiers libres sont utilisés).
4 : tu forke.
4.1 (dans le fork) tu fais un gros exec
4.2 (dans le pere) tu lis dans le pipe.
 
de mémoire.

n°347629
Deadog
Dain Bramaged
Posté le 30-03-2003 à 18:23:33  profilanswer
 

oki, j'vais essayer :)
 
mici :jap:

n°347637
Taz
bisounours-codeur
Posté le 30-03-2003 à 18:42:30  profilanswer
 

man 3 popen fais tous ça pour toi et surement

n°347639
lorill
Posté le 30-03-2003 à 18:43:51  profilanswer
 

deadog a écrit :


j'ai essaye popen

n°347644
Taz
bisounours-codeur
Posté le 30-03-2003 à 18:53:23  profilanswer
 

ben c'est pour ça que je conseille le man, par ce que je vois pas pourquoi ça boufferai plus de ressources. popen n'a rien de magique, c'est un mix de toutes les fonctions décrites
 
et je vois pas ce que ca veut dire bouffer des ressources. j'en utilise tous le temps et le temps d'exécution et de récupération est tout à fait minime. les ralentissement que tu observes viennent  de l'executable que tu lance, pas de popen

n°347647
Deadog
Dain Bramaged
Posté le 30-03-2003 à 18:57:06  profilanswer
 

popen utilise sh en plus
 
et je veux essayé si par moi même c plus rapide ou pas
 
kan à l'utilisation de ressource je le vois bien !! j'ai essayé sans popen (sans faire d'opération du tout à ce niveau la) et l'utilisatoin cpu a fortement baissé (faut dire ke ça fait des "boucle" sur le popen)

n°347655
Taz
bisounours-codeur
Posté le 30-03-2003 à 19:04:50  profilanswer
 

si tu le dis [:spamafote]  :heink:

n°348627
Deadog
Dain Bramaged
Posté le 31-03-2003 à 22:16:56  profilanswer
 

bon, j'ai réussi :)
 
mici lorill, mais ce ke tu m'a donner était pas dans le bon sens :D m'enfin, j'ai pu chercher kan même :)
 
j'ai fait :
1-ouvrir le pipe
2-fork
3.fils-fermer stdout
4.fils-dup de stdout
3.père-attendre :D
4.père-lire
 
 
voila ce ke j'ai fait :
 

Code :
  1. if(pipe(fd) < 0) return 0;
  2.   switch (fork()) {
  3.    case -1:
  4.     return 0;
  5.    break;
  6.    case 0:
  7.     if(close(1) < 0) return 0;
  8.     if(dup(fd[1]) < 0) return 0;
  9.     execlp("uname", "uname", "-n", NULL);
  10.    break;
  11.    default:
  12.     wait(NULL);
  13.     while (read(fd[0], buf, BUFSIZ)  != 0 && fd[0]) {
  14.       ...
  15.     }
  16.   }

 
 
 
le gain est faible, mais non négligeable puisque dans mes test j'en fais moins ke lors de son utilisation réel :)
ça m'a permit de passer de 20% d'utilisation cpu à 9-10 % ^^ (en faite, ct surtout enchainé les pipe dans le popen ki bouffer ! (avec les grep, cut, etc ...))


Message édité par Deadog le 31-03-2003 à 22:20:05
n°348628
Deadog
Dain Bramaged
Posté le 31-03-2003 à 22:19:46  profilanswer
 

j'ai oublié :
 
est-ce ke j'ai besoin de "rebrancher" le stdout après pour retrouver une utilisation normal ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] Faire marcher pipe et fork conjointement ?

 

Sujets relatifs
Resolu[c/Linux]Comment recupérer les infos d'un pipe sans perte de donFork et killage propre
comment faire marcher delay sous xp ?Je n'arrive pas à faire marcher les cookies :-/
[Fork] Gestion des childs - Besoin d'aides :)[mysql] phpmyadmin veut pas marcher
Pb pour faire marcher gtk avec des threads (C)[JAVA] comment lire/ecrire un Object dans un pipe?
[C, Unix, fork()] Les fils meurent trop vite!![C/C++] Exécuter plusieurs fonctions en même temps : fork ???
Plus de sujets relatifs à : [C/C++] Faire marcher pipe et fork conjointement ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR