J'ai essayé de chercher sur le net, mais il n'y a pratiquement pas de ressources. Un petit exemple suffirait.
EDIT Je veux dire, deux programmes C différents communiquant entre eux. Un programme doit envoyer "Salut" et l'autre doit le recevoir. Quelque chose comme ca.
ls | grep ".o"
? Peut-être qu'un peu plus d'explications sur ce que vous voulez dire aiderait ...Réponses:
Un tube normal ne peut connecter que deux processus associés. Il est créé par un processus et disparaîtra lorsque le dernier processus le fermera.
Un tube nommé , également appelé FIFO pour son comportement, peut être utilisé pour connecter deux processus non liés et existe indépendamment des processus; ce qui signifie qu'il peut exister même si personne ne l'utilise. Un FIFO est créé à l'aide de la
mkfifo()
fonction de bibliothèque.Exemple
écrivain.c
lecteur.c
Remarque: la vérification des erreurs a été omise du code ci-dessus pour plus de simplicité.
la source
open()
le lecteur dans une boucle. Cependant +1 parce que vous fournissez un exemple de deux programmes.Depuis la création de tubes en C , cela vous montre comment créer un fork d'un programme pour utiliser un tube. Si vous ne voulez pas fork (), vous pouvez utiliser des tubes nommés .
De plus, vous pouvez obtenir l'effet de
prog1 | prog2
en envoyant la sortie deprog1
vers stdout et en lisant depuisstdin
inprog2
. Vous pouvez également lire stdin en ouvrant un fichier nommé/dev/stdin
(mais pas sûr de la portabilité de celui-ci).la source
Et lis:
Mais je pense que cela
fcntl
peut être une meilleure solutionla source
Ce qu'un programme écrit sur stdout peut être lu par un autre via stdin. Donc simplement, en utilisant c, écrivez
prog1
pour imprimer quelque chose en utilisantprintf()
etprog2
pour lire quelque chose en utilisantscanf()
. Alors viens de courirla source
Voici un exemple :
Les étapes importantes de ce programme sont:
popen()
appel qui établit l'association entre un processus enfant et un tube dans le parent.fprintf()
appel qui utilise le tube comme un fichier ordinaire pour écrire dans le stdin du processus enfant ou lire à partir de son stdout.pclose()
appel qui ferme le canal et provoque la fin du processus enfant.la source
Tout d'abord,
stdout
demandez au programme 1 d'écrire la chaîne (comme si vous souhaitiez qu'elle apparaisse à l'écran). Ensuite, le deuxième programme doit lire une chaîne destdin
, comme si un utilisateur tapait à partir d'un clavier. puis vous exécutez:la source
Cette réponse pourrait être utile pour un futur Googleur.
Vous pouvez trouver un exemple d'appel de canal bidirectionnel avancé ici .
la source