Maison >Tutoriel système >Linux >Linux Named Pipes (FIFO) : un moyen simple mais puissant de communiquer entre les processus
Le système Linux est un système d'exploitation qui prend en charge l'exécution simultanée de tâches multiples. Il peut exécuter plusieurs processus en même temps, améliorant ainsi l'utilisation et l'efficacité du système. Cependant, si l'échange de données et la collaboration sont requis entre ces processus, certaines méthodes de communication inter-processus (IPC) doivent être utilisées, telles que les signaux, les files d'attente de messages, la mémoire partagée, les sémaphores, etc. Parmi eux, le fameux pipe (FIFO) est une méthode IPC relativement simple et puissante. Elle permet à deux ou plusieurs processus de transmettre des données via un fichier sans se soucier du contenu et du format du fichier. Cet article présentera les méthodes de lecture et d'écriture bloquantes et non bloquantes des canaux célèbres (FIFO) dans les systèmes Linux, y compris la création, l'ouverture, la lecture, l'écriture, la fermeture et la suppression de canaux célèbres.
#inclure
#inclure
#inclure
#inclure
#inclure
#inclure
#define FIFO_NAME « /tmp/myfifo »
principale()
{
int fd;
char w_buf[50];
int w_num;
// Si fifo existe déjà, utilisez-le directement, sinon créez-le
if((mkfifo(FIFO_NAME,0777)
{
printf("impossible de créer fifo…n");
sortie(1);
}
//Ouvrir fifo en mode bloquant l'écriture seule
fd=ouvert(FIFO_NAME,O_WRONLY);
w_num=write(fd,”abcdg
printf("%dn",w_num);}
principale()
{
char r_buf[50];
int fd;
int r_num;
// Si fifo existe déjà, utilisez-le directement, sinon créez-le
if((mkfifo(FIFO_NAME,0777) {
printf("impossible de créer fifo…n");
sortie(1);
}
//Ouvrir fifo en mode lecture seule bloquant
fd=open(FIFO_NAME,O_RDONLY);
if(fd==-1)
{
printf("ouvrir %s pour une erreur de lecture");
sortie(1);
}
// Entrez la chaîne via le clavier et écrivez-la dans le fifo jusqu'à ce que "exit" soit saisi
r_num=read(fd,r_buf,6);
printf(” %d octets lus :%sn”,r_num,r_buf);
dissocier(FIFO_NAME);//Supprimer fifo
}
Lancer d'abord le processus de lecture (bloqué), puis lancer le processus d'écriture, tout est normal.
Exécutez d'abord le processus d'écriture (bloqué), puis lancez le processus de lecture, tout est normal.
Exécutez d'abord le processus de lecture, et le programme plante directement (Défaut de segmentation (core dumped)). C'est assez naturel quand on y pense. Vous n'avez rien à lire et vous ne voulez pas attendre.
Lancer d'abord le processus de lecture (bloqué), puis lancer le processus d'écriture, tout est normal.
De plus, nous pouvons voir grâce à la commande ls -la dans le répertoire /tmp que la taille du fichier pipe myfifo est toujours 0. En effet, bien que le fichier FIFO existe dans le système de fichiers, le contenu du FIFO est stocké dans la mémoire, donc la taille du fichier est toujours 0.
Cet article présente les méthodes de lecture et d'écriture bloquantes et non bloquantes des tubes célèbres (FIFO) dans les systèmes Linux, y compris la création, l'ouverture, la lecture, l'écriture, la fermeture et la suppression de tubes célèbres. En comprenant et maîtrisant ces connaissances, nous pouvons mieux utiliser les canaux célèbres (FIFO) pour mettre en œuvre la communication inter-processus et améliorer les performances et la fiabilité du système. Bien sûr, il existe de nombreuses autres fonctionnalités et utilisations des célèbres tubes (FIFO) dans les systèmes Linux, qui nous obligent à continuer à apprendre et à explorer. J'espère que cet article pourra vous apporter de l'inspiration et de l'aide.
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!