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] Récuperer stdin d'un bin executé

picdelh
picdelh
Niveau 9
09 juillet 2014 à 14:26:21

Bonjour,

Je cherche à coder un pipe assez basique en c.

Le but final serait de pouvoir éxecuter des commandes comme :

ls -l | less

J'ai fait quelques recherches pour exécuter mes binaires, je fork mon processus puis j'utilise la fonction execvp. Mais je n'arrive pas à récupérer sa sortie standart (le file descriptor). La sortie de "ls -l" sur l'exemple.
J'ai aussi le même problème pour executer "less" avec un stdin donné.

Si quelqu'un a des idées je suis preneur :)

Cordialement

trymort
trymort
Niveau 9
09 juillet 2014 à 19:28:08

Tu peux chercher du coté de dup et dup2, pour passer la sortie du ls en entree sur less.

Bonne chance

picdelh
picdelh
Niveau 9
09 juillet 2014 à 21:00:58

Merci de ta réponse !

J'avais déja cherché de ce cote la :)

Voici ce que j'ai trouvé (Pour ceux que ca interresse....)

pid_t pid_fork = fork();
pid_t pid_grep = fork();

int status;
int pipefd[2];
pipe(pipefd);

if (pid_fork == 0)
{
close(pipefd[0]);
dup2(pipefd[1], STDOUT_FILENO);
execlp("ls", "ls", "-l", NULL);
perror("ls");
}

if (pid_grep == 0)
{
close(pipefd[1]);
dup2(pipefd[0], STDIN_FILENO);
execlp("less", "less", NULL);
}

close(pipefd[0]);
close(pipefd[1]);

while(wait(NULL))
{
if (errno == ECHILD) // Plus de fils
break;
}

picdelh
picdelh
Niveau 9
09 juillet 2014 à 21:50:59

Au fait "int status" est inutile dans ce code la...

En faisait "while (wait(NULL))" On attend que tout les fils soient morts avant de finir le programme

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