Comment faire une pipe en c++
Je suis en train de regarder le code d'un programme en c++ qui les tuyaux le contenu d'un fichier de plus. Je ne comprends pas très bien, donc je me demandais si quelqu'un pouvais écrire le pseudo-code d'un programme en c++ des tuyaux de quelque chose à quelque chose d'autre? Pourquoi est-il nécessaire d'utiliser la fourche?
Vous devez utiliser la fourche depuis la tuyauterie est une forme de parallélisation de votre programme, et si vous n'avez pas de fourche, alors il ne fonctionnera pas correctement.
OriginalL'auteur node ninja | 2011-04-30
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin
fork()
de sorte que vous pouvez remplacer stdin de l'enfant avant de l'appeler, et de sorte que vous n'avez pas à attendre pour le processus avant de continuer.OriginalL'auteur Ignacio Vazquez-Abrams
Vous trouverez votre réponse précise ici
OriginalL'auteur vrajs5
Lorsque vous exécutez un pipeline à partir de la coquille, par exemple.
ce qui se passe? Le shell exécute deux processus (un pour
ls
, un pourmore
). En outre, la sortie (STDOUT) dels
est reliée à l'entrée (STDIN) demore
, par un tuyau.Noter que
ls
etmore
n'avez pas besoin de savoir quelque chose au sujet de tuyaux, ils ont juste écrire (et lire) leur STDOUT (et STDIN) respectivement. En outre, parce qu'ils sont susceptibles de faire des blocage les lectures et les écritures, il est essentiel qu'ils peuvent s'exécuter simultanément. Sinonls
pourrait vous suffit de remplir le tube de tampon et de bloquer à jamais devantmore
obtient une chance de consommer quoi que ce soit.Note également qu'en dehors de la simultanéité de l'argument, si votre autre chose est un autre programme (comme
more
), il doit exécuter dans un autre processus. Vous créez ce processus à l'aide defork
. Si vous venez d'exécutermore
dans le actuel (à l'aideexec
), il serait remplacer votre programme.En général, vous peut utilisez un tuyau sans
fork
, mais vous aurez juste être la communication au sein de votre propre processus. Cela signifie que vous êtes soit non-opérations de blocage (peut-être en mode synchrone co-routine d'installation), ou l'utilisation de plusieurs threads.OriginalL'auteur Useless