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

Reprendre le control avec un fork execvp

landrin78
landrin78
Niveau 18
11 juillet 2013 à 05:17:28

Bonjour,

Je n'arrive pas à executer "ls -la | wc && date", je n'arrive pas à executer le date car je m'arrete après le pipe.
Voici mon code:

int exec_pipe(char** fils, char** pere)
{
int child_pid;
int child_status;
int exec;
int p[2];
int r = 0;
char buffer[1024];

pipe(p);
if ((child_pid = fork()) < 0)
» exit(1);
else if (child_pid == 0)
{
» close(p[1]);
» dup2(p[0], 0);
» close(p[0]);
» execvp(pere[0], pere);

» if (exec < 1)
» exit(1);
}
else
{
» close(p[0]);
» dup2(p[1], 1);
» close(p[1]);
» exec = execvp(fils[0], fils);
}
wait(&child_status);

return exec;
}

Pourriez-vous m'aider s'il vous plaît ? :)
Merci d'avance :)

godrik
godrik
Niveau 30
11 juillet 2013 à 18:19:04

salut a toi,

relis le manuel de execvp. un appel a exec ne revient pas. Dans ce code la ligne wait(&child_status) ne revient pas.
J'imagine que tu ecris un shell.
Si ton shell fait "ls | grep foo", il te faut faire deux appel a fork/exec, un pour creer "ls" et un pour creer "grep foo".

landrin78
landrin78
Niveau 18
11 juillet 2013 à 19:37:28

Ah oui ça marche là :merci:
Enfin la commande est bien executée mais si je la lance dans mon shell, il le quitte pour revenir sous bash. Saurai tu comment je pourrai rester dans mon shell après la commande s'il te plaît ? :) Il faudrait rappeler la boucle principale du shell pour revenir dedans mais j'ai besoin d'executer le "grep foo" avant. :(

godrik
godrik
Niveau 30
11 juillet 2013 à 21:55:28

Ca depend beaucoup de l'architecture de ton code. c'est difficile a dire comme ca. Tu peux regarder les codes des autes qui ont ecrit des shell. C'est un exercice populaire dans les ecoles d'informatique.

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