CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C]PB communication par pipe

gokusnake
gokusnake
Niveau 7
29 avril 2006 à 12:24:17

salut à tous, en fait, je ne comprend pas très bien ce que fait la méthode dup2() et donc son utilité.

En fait, j´aimerai simuler des commandes sous linux genre ls | tr ... | cut...

donc il faut creer daux fils, le premier fait execlp pour le ls, le deuxieme tr et le pere fait cut.

chaque | correspond a un pipe pour faire communiquer les processus ensemble, et apparemment c´est dup2() qui s´en charge, mais bon, je vois pas trop comment ça fonctionne.

merci par avance, @+

dnob700
dnob700
Niveau 10
30 avril 2006 à 00:28:19

je n´ais pas tout a fait compris ta question, mais (mais je suppose que tu le sais déjà), le principe du pipe est de connecter les entrée et sortie standardde logiciel :

quand tu écrit
bidule | truc
alors bidule et truc sont lancé, mais tout ce que bidule écrit sur la sortie standard (avec printf par exemple) peut être lu par truc sur son entrée standard (avec scanf par exemple).

godrik
godrik
Niveau 30
30 avril 2006 à 13:11:01

dup et dup2 copie un filedescriptor vers un autre (que l´on precise dans le as de dup2, vers le plus petit disponible dans le cas de dup).

Sous unix, l´entre standard est le file descriptor 0, la sortie standard est le file descriptor 1 et la sortie de diagnostique est le file descriptor 2.
ainsi, si tu veux faire un ls | grep

il suffit de faire
fork()
le shell se place en attente, le fils fait:
pipe(canal entre, canal sortie);
puis fork()
un nouveau processus est crée l´un fait:
close(1); pour fermer sa sortie puis fait
dup2(canal entre, 1);
close (canal entre); ainsi il a redirige sa sortie standard sur le tube crée.
puis exec ("ls");
l´autre fait pareil en fermant son entré standard et en copiant la sortie du tube sur son entré.

gokusnake
gokusnake
Niveau 7
30 avril 2006 à 15:22:16

ok, merci, par contre, pourquoi faire deux fork.
Un seul suffit, non? Le fils peut s´occuper de ls et le pere de grep.

merci encore, @+

godrik
godrik
Niveau 30
30 avril 2006 à 20:01:01

et tu perds ton shell...
A toi de voir si tu veux un shell persistant ou non!

gokusnake
gokusnake
Niveau 7
30 avril 2006 à 21:02:08

ah, ok, merci. :)

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment