Maison > Tutoriel système > Linux > Linux Named Pipes (FIFO) : un moyen simple mais puissant de communiquer entre les processus

Linux Named Pipes (FIFO) : un moyen simple mais puissant de communiquer entre les processus

WBOY
Libérer: 2024-02-11 21:36:18
avant
819 Les gens l'ont consulté

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.

Linux Named Pipes (FIFO) : un moyen simple mais puissant de communiquer entre les processus

//Processus d'écriture

#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);

}

//Processus de lecture

#inclure

#inclure

#inclure

#inclure

#define FIFO_NAME « /tmp/myfifo »

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

}

1. Le processus d'écriture est bloqué et le processus de lecture est bloqué.

Exécutez d'abord le processus d'écriture (bloqué), puis lancez le processus de lecture, tout est normal.

Lancer d'abord le processus de lecture (bloqué), puis lancer le processus d'écriture, tout est normal.

2. Le processus d'écriture est bloqué et le processus de lecture est non bloquant.

Changez simplement le code en fd=open(FIFO_NAME,O_RDONLY | O_NONBLOCK), similaire à ce qui suit.

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.

3. Le processus d'écriture est non bloquant et le processus de lecture est bloqué.

Exécutez d'abord le processus d'écriture, l'appel ouvert renverra -1 et l'ouverture échouera.

Lancer d'abord le processus de lecture (bloqué), puis lancer le processus d'écriture, tout est normal.

4. Le processus d'écriture est non bloquant et le processus de lecture est non bloquant.

En fait, c'est une situation anormale où la moitié des catégories 2 et 3 ci-dessus sont prises.

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!

source:lxlinux.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal