Bonjour à tous,
via la commande mkfifo j'ai crée un fichier pipe : mkfifo /tmp/myPipeNamed. Puis ensuite à travers deux terminaux j'ai ouvert ce fichier :
cat /tmp/myPipeNamed (sur chaque terminal)
puis via le code :
int main(int argc, char const *argv[])
{
int pipeNamed_fd = open("/tmp/myPipeNamed", O_WRONLY);
char buffer[256];
while(1)
{
write(1,"ecrivez quelque chose : ", 24);
int byteReceivedFromKeyboard = read(0, buffer, 256);
buffer[byteReceivedFromKeyboard - 1] = '\0'; //on remplace le retour chariot \n par \0
write( pipeNamed_fd, buffer, strlen( buffer ));
}
close(pipeNamed_fd);
return 0;
}
ce qui me pose probleme c'est que le message que j'envoie au fichier /tmp/myPipeNamed est recu aléatoirement sur un de mes terminals ou j'ai lancé la commande : cat /tmp/myPipeNamed
alors que je m'attendais a ce que chaque terminal recoit le message car ils sont tous les deux a l'écoute du fichier pipe. Il semblerait que le noyau ne transmet le message juste à un seul receveur, mais pourquoi faire ca ?
Merci de votre aide
# Premier arrivé, premier servi
Posté par balkany . Évalué à 2.
Le premier cat qui lit le pipe le vide, le second tombe sur EOF : (man pipe.7)
Pas besoin de passer par un programme C pour voir ça d'ailleurs : tu peux le remplacer par un echo 'texte' >/tmp/myPipeNamed dans un autre terminal.
# Un pipe c'est entre deux processus
Posté par Renault (site web personnel) . Évalué à 4.
Un pipe c'est rediriger une sortie d'un programme vers l'entrée d'une autre. Cela est utile pour modulariser des traitements ou appliquer des filtres sur du texte successivement par exemple.
Donc de fait pour un pipe il y a un processus qui émet en entrée et un seul qui récupère les données en sortie. Sinon, tu observe des comportements étranges comme celui que tu as où deux processus accèdent à des portions de la sortie suivant l'état du buffer du pipe et l'ordonnancement du système d'exploitation.
Il existe après des outils et méthodes pour dupliquer le pipe (et donc une émission en entrée puisse être lue comme tu l'attends par X processus derrière) mais ce n'est pas le comportement standard d'un pipe qui est plus élémentaire que ça.
# Commentaire supprimé
Posté par rayan008 . Évalué à 1. Dernière modification le 22 août 2020 à 10:57.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Commentaire supprimé
Posté par rayan008 . Évalué à 1. Dernière modification le 22 août 2020 à 10:56.
Ce commentaire a été supprimé par l’équipe de modération.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.