Files de messages
Messagerie structurée
Files de messages est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C Academy comprend 4 leçons au total.
Messagerie structurée
Une file de messages permet aux processus d'échanger des messages distincts plutôt qu'un flux brut d'octets. Le noyau préserve les limites des messages : chaque envoi correspond donc exactement à une réception.
Messages et flux
Les tubes fournissent un flux d'octets dont les limites deviennent floues. Les files de messages fournissent des unités entières :
- chaque
sendcorrespond à un message - chaque
receiverenvoie un message - les messages peuvent être prioritaires
Files POSIX contre files System V
Deux API existent :
- POSIX :
mq_open,mq_send,mq_receive, avec un nom commençant par une barre oblique - System V :
msgget,msgsnd,msgrcv, fondée sur des clés et des messages typés
POSIX est le choix moderne et le plus clair.
Ouvrir une file
mq_open crée ou ouvre une file nommée et renvoie un descripteur. Vous pouvez transmettre des attributs tels que le nombre maximal de messages et leur taille.
#include <mqueue.h>
#include <fcntl.h>
mqd_t open_queue(const char *name) {
return mq_open(name, O_CREAT | O_RDWR, 0644, NULL);
/* name like "/myqueue"; NULL uses default attributes */
}Attributs d'une file
struct mq_attr définit mq_maxmsg (la capacité) et mq_msgsize (le nombre maximal d'octets par message). Le tampon du récepteur doit être au moins égal à mq_msgsize.
#include <mqueue.h>
void set_attr(struct mq_attr *a) {
a->mq_flags = 0;
a->mq_maxmsg = 10; /* up to 10 queued messages */
a->mq_msgsize = 256; /* each at most 256 bytes */
a->mq_curmsgs = 0;
}Envoyer un message
mq_send place un message dans la file avec une priorité. Les messages de priorité supérieure sont remis en premier.
#include <mqueue.h>
#include <string.h>
int post(mqd_t q, const char *text) {
return mq_send(q, text, strlen(text) + 1, 5); /* priority 5 */
}Recevoir un message
mq_receive renvoie le message de priorité la plus élevée. Le tampon doit être au moins égal à mq_msgsize, sinon l'appel échoue avec EMSGSIZE.
#include <mqueue.h>
#include <stdio.h>
void get(mqd_t q, size_t msgsize) {
char buf[256];
unsigned prio;
ssize_t n = mq_receive(q, buf, msgsize, &prio);
if (n >= 0) printf("got (prio %u): %s\n", prio, buf);
}Les priorités déterminent l'ordre de remise
Contrairement à un tube FIFO, une file de messages remet d'abord les messages selon leur priorité, puis selon leur ordre d'arrivée pour une même priorité. Les messages urgents peuvent ainsi passer devant les autres.
Bloquant contre non bloquant
Par défaut, mq_send se bloque lorsque la file est pleine et mq_receive lorsqu'elle est vide. Ouvrez-la avec O_NONBLOCK pour que ces appels renvoient EAGAIN au lieu d'attendre.
Opérations temporisées
mq_timedsend et mq_timedreceive acceptent une échéance absolue et échouent avec ETIMEDOUT si l'opération ne peut pas se terminer à temps. Cela évite d'attendre indéfiniment.
Nettoyage
Fermez le descripteur avec mq_close et supprimez la file nommée du système avec mq_unlink afin qu'elle ne persiste pas une fois que tous les utilisateurs ont terminé.
#include <mqueue.h>
void cleanup(mqd_t q, const char *name) {
mq_close(q);
mq_unlink(name); /* remove the named queue */
}Vérification rapide
Testez votre compréhension des files de messages.
Récapitulatif
Vous avez appris à utiliser les files de messages POSIX.
- Échanger des messages distincts, et non des octets bruts
mq_open,mq_send,mq_receive- La remise s'effectue selon la priorité, puis l'ordre d'arrivée
- Variantes non bloquantes et temporisées facultatives ; effectuer le nettoyage avec mq_close et mq_unlink
Questions Fréquemment Posées
La leçon « Files de messages » est-elle gratuite ?
Oui — le texte complet de « Files de messages » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C Academy, passe à CoddyKit PRO. Le cours C Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Files de messages » ?
Messagerie structurée Tu pratiques C Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C Academy ?
Aucune expérience préalable n'est requise. C Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Files de messages » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C Academy ?
Oui. Chaque leçon C Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Tubes
- Mémoire partagée
- Files de messages
- Signaux