Maison  >  Article  >  développement back-end  >  Comment exécuter un processus enfant avec des E/S standard canalisées en C ?

Comment exécuter un processus enfant avec des E/S standard canalisées en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-10 14:08:02599parcourir

How to Execute a Child Process with Piped Standard I/O in C  ?

Passer des paramètres d'E/S standard aux processus enfants via des tuyaux

L'objectif est de créer une fonction C qui exécute un processus enfant (" foo") avec la chaîne fournie comme entrée standard ("s") et renvoie la sortie standard de l'enfant dans une variable de chaîne.

Appels système et fonctions POSIX

Le Les appels système et fonctions POSIX suivants sont requis pour cette tâche :

  • pipe() : crée un canal pour la communication entre les processus parent et enfant.
  • fork() : crée un nouvel enfant process.
  • dup2() : duplique un descripteur de fichier vers un autre descripteur.
  • execve() : exécute une nouvelle image de programme dans le processus en cours.
  • write() : Écrit des données dans un descripteur de fichier.
  • read() : lit les données d'un descripteur de fichier.

Implémentation de la fonction

La fonction ci-dessous suit ces étapes pour exécuter un processus enfant avec des E/S standard canalisées :

  1. Créez deux canaux, un pour l'entrée standard et un pour la sortie standard.
  2. Fork un nouveau processus enfant.
  3. Dans le processus enfant :

    • Rediriger son entrée standard vers l'extrémité de lecture du tube d'entrée.
    • Rediriger sa sortie standard et son erreur standard vers la fin d'écriture du tube de sortie.
    • Fermez tous les descripteurs de fichiers inutilisés hérités du parent.
    • Exécutez le programme enfant ("foo") en utilisant execve().
  4. Dans le processus parent :

    • Fermez les extrémités inutilisées des tuyaux.
    • Écrivez la chaîne d'entrée à l'extrémité d'écriture du tuyau d'entrée.
    • Lisez et stockez la sortie standard de l'enfant à partir de l'extrémité de lecture du tube de sortie.
    • Attendez que le processus enfant ait fini d'utiliser fork().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn