Je suis confus par la façon dont linux pourrait laisser l'application lire depuis un tube comme "cat/etc/hosts | grep 'localhost'". Je sais dans un programme indépendant fourche un enfant et communique par pipe entre eux. Mais pour deux programmes indépendants communiquant par pipe je ne sais pas comment. Dans l'exemple "cat/etc/hosts | grep 'localhost'" Comment Grep pouvait-il savoir quel descripteur de fichier il devrait lire pour obtenir l'entrée de "cat/etc/hosts". Y a-t-il un tuyau "conventionnel" fourni par OS, pour que Grep sache où trouver l'entrée? Je veux connaître le mécanisme derrière cela. Dans votre exemple, grep dans votre exemple l'obtient de stdin.Comment linux Os permet aux applications de lire à partir du tube
0
A
Répondre
4
Il est de la responsabilité du shell d'appeler pipe(2)
pour créer le canal, puis dup2(2)
dans chacun des fork(2)
enfants pour affecter leur extrémité du canal à stdin ou stdout avant d'appeler l'une des fonctions exec(3)
pour exécuter réellement les autres exécutables.
Le point important ici est que dans l'exemple donné, 'cat' et' grep' sont tous les deux des processus enfants du shell, donc ils sont * liés *. – caf
C'est 'pipe (2)', pas 'mkfifo (3)', puisque le pipe est sans nom. –
@Roman: D'accord, merci. –