GNU/Linux >> Tutoriels Linux >  >> Linux

Présentation du guide de communication inter-processus sous Linux

Faire en sorte qu'un processus logiciel communique avec un autre processus logiciel est un exercice d'équilibre délicat. Cependant, cela peut être une fonction vitale pour une application, c'est donc un problème que tout programmeur qui se lance dans un projet complexe doit résoudre. Si votre application doit lancer un travail géré par le logiciel de quelqu'un d'autre ; pour surveiller une action en cours d'exécution par un périphérique ou sur un réseau ; ou pour détecter un signal provenant d'une autre source, lorsque votre logiciel s'appuie sur quelque chose en dehors de son propre code pour savoir quoi faire ensuite ou quand le faire, vous devez penser à la communication inter-processus (IPC).

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Le système d'exploitation Unix a tenu compte de cela il y a longtemps, peut-être en raison d'une attente précoce selon laquelle les logiciels proviendraient de sources diverses. Dans la même tradition, Linux fournit plusieurs des mêmes interfaces pour IPC et quelques nouvelles. Le noyau Linux propose plusieurs méthodes IPC et le package util-linux contient le ipcmk , ipcrm , ipc , et lsipc commandes de surveillance et de gestion des messages IPC.

Afficher les informations IPC

Avant d'expérimenter avec IPC, vous devez savoir quelles fonctionnalités IPC sont déjà sur votre système. Le lsipc la commande fournit ces informations.

RESOURCE DESCRIPTION               LIMIT  USED  USE%
MSGMNI   Nombre de files d'attente de messages  32000     0 0,00 %
MSGMAX   Taille maximale du message (octets.. 8192     -     -
MSGMNB   Taille maximale par défaut de la file d'attente 16384     - -
SHMMNI   Segments de mémoire partagée     4096    79 1,93 %
SHMALL   Pages de mémoire partagée       184[...] 25452 0,00 %
SHMMAX   Taille maximale de la mémoire partagée 18446744073692774399
SHMMIN   Taille minimale de la mémoire partagée mémoire     1     -     -
SEMMNI   Nombre d'identifiants de sémaphore 32000     0 0,00 %
SEMMNS   Nombre total de sémaphores 1024000.. 0 0,00 %
SEMMSL   Max sémaphores par sémaphore  32000     -     -
SEMOPM   Max nombre d'opérations p  500     -     -
SEMVMX   Valeur maximale du sémaphore       32767     -     -

Vous remarquerez peut-être que cet exemple de liste comprend trois types différents de mécanismes IPC, chacun disponible dans le noyau Linux :messages (MSG), mémoire partagée (SHM) et sémaphores (SEM). Vous pouvez afficher l'activité actuelle dans chacun de ces sous-systèmes avec ipcs commande :

$ ipcs 

------ Créateurs/propriétaires de files d'attente de messages ---
msqid     perms     cuid      cgid  [...]

-- ---- Créateurs/Propriétaires de segments de mémoire partagée
shmid     perms    cuid    cgid  [...]
557056    700      seth    utilisateurs [...]
3571713  700      seth    utilisateurs [...]
2654210   600      seth    utilisateurs [...]
2457603   700      seth    utilisateurs [...]

------ Créateurs/propriétaires de tableaux de sémaphores ---
semi     perms     cuid      cgid  [...]

Cela montre qu'il n'y a actuellement aucun message ou tableau de sémaphores, mais qu'un certain nombre de segments de mémoire partagée sont en cours d'utilisation.

Il existe un exemple simple que vous pouvez exécuter sur votre système afin que vous puissiez voir l'un de ces systèmes au travail. Cela implique du code C, vous devez donc disposer d'outils de construction sur votre système. Les noms des packages que vous devez installer pour pouvoir compiler à partir du code source varient en fonction de votre distribution, consultez donc votre documentation pour plus de détails. Par exemple, sur les distributions basées sur Debian, vous pouvez en savoir plus sur les exigences de construction dans la section BuildingTutorial du wiki, et sur les distributions basées sur Fedora, reportez-vous à la section Installation du logiciel à partir de la source de la documentation.

Créer une file d'attente de messages

Votre système a déjà une file d'attente de messages par défaut, mais vous pouvez créer la vôtre à l'aide de ipcmk commande :

$ ipcmk --queue
ID de la file d'attente des messages :32764

Écrivez un expéditeur de message IPC simple, codé en dur dans l'ID de la file d'attente pour plus de simplicité :

#include 
#include
#include
#include

struct msgbuffer {
  char text[24];
} message;

int main() {
    int msqid =32764;
    strcpy(message.text,"opensource.com");
    msgsnd(msqid, &message, sizeof(message), 0);
    printf("Message :%s\n",message.text );
    printf("File d'attente :%d\n",msqid);
    return 0 ;
        }

Compilez l'application et exécutez-la :

$ gcc msgsend.c -o msg.bin
$ ./msg.bin
Message :opensource.com
File d'attente :32769

Vous venez d'envoyer un message à votre file d'attente de messages. Vous pouvez vérifier cela avec le ipcs commande, en utilisant la commande --queue option pour limiter la sortie à la file d'attente des messages :

$ ipcs -q

------ Message Queues --------
key        msqid   owner  perms  used-bytes  messages
0x7b341ab9 0       seth 666    0          0
0x72bd8410 32764   set   644    24         1

Vous pouvez également récupérer ces messages avec :

#include 
#include
#include

struct msgbuffer {
    texte de caractère[24] ;
} message ;

int main() {
    int msqid =32764;
    msgrcv(msqid, &message, sizeof(message),0,0);
    printf("\ nQueue :%d\n",msqid);
    printf("Message reçu :%s\n", message.text);
    msgctl(msqid,IPC_RMID,NULL);
renvoie 0 ;

Compiler et exécuter avec :

$ gcc get.c -o get.bin
$ ./get.bin

File d'attente :32764
J'ai reçu ce message :opensource.com

Télécharger le livre électronique

Ceci n'est qu'un exemple des leçons disponibles dans le guide A guide to inter-process communication in Linux de Marty Kalin, le dernier eBook téléchargeable gratuitement (et Creative Commons) sur Opensource.com. En quelques courtes leçons, vous découvrirez les méthodes POSIX d'IPC à partir des files d'attente de messages, de la mémoire partagée et des sémaphores, des sockets, des signaux et bien plus encore. Asseyez-vous avec le livre de Marty et vous en sortirez un programmeur mieux informé. Mais ce n'est pas seulement pour les codeurs chevronnés - si vous n'écrivez jamais que des scripts shell, il y a beaucoup de connaissances pratiques sur les canaux (nommés et sans nom) et les fichiers partagés, ainsi que sur les concepts importants que vous devez savoir lorsque vous utilisez un fichier partagé ou une file d'attente de messages externe.

Si vous souhaitez créer un excellent logiciel écrit pour être dynamique et compatible avec le système, vous devez connaître IPC. Laissez ce livre vous guider.


Linux
  1. Un guide du terminal Linux pour les débutants

  2. Outils Linux :faire passer le message avec dmesg

  3. Installer Linux Mint 19 sur VirtualBox :Le guide complet

  4. Présentation d'Amazon Linux

  5. Un guide de la commande Linux "Rechercher"

Le guide complet d'utilisation de ffmpeg sous Linux

Comment tuer ou terminer un processus Linux :Le guide ultime

Un guide pratique pour la commande chroot sous Linux

Le guide ultime du sous-système Windows pour Linux (Windows WSL)

Le guide ultime pour créer des utilisateurs sous Linux / Unix

Comment rétrograder des packages sur le système Linux :le guide ultime