Opérations sur les files
(sys/ipc.h et sys/msg.h)

int msgget(key_t cle, int msgflg)
:Renvoie l'identificateur de la file de message de clé externe unique cle. Si elle n'existe pas et si msgflg contient IPC_CREAT, msgget la crée avec les droits d'accès définis dans msgflg. Cette fonction renvoie -1 si erreur.
exemple:

    Num=msgget(1000,0666|IPC_CREAT); crée une file de message de clé externe 1000. Num est la clé interne.

int msgsnd(int msgid, struct msgbuf* msgp, int msgsz, int msgflg) : envoie dans la file de numéro interne msgid, les octets se trouvant à l'adresse msgp. La structure comporte en tête le type de message suivi des msgsz octets à envoyer. msgflg indique ce qu'il faut faire si la file est pleine (blocage ( 0) ou sortie en échec (IPC-NOWAIT )).
exemple:    
   struct message {
long  mtype; char mtext[256]; };     
    struct message unmessage = {100L, "bonjour vous"};   
    msgsnd(Num,&unmessage, strlen(unmessage.text)+1,0);         

int msgrcv(int msgid, struct msgbuf* msgp, int msgsz, int msgtyp, int msgflg) : réception d'un message de longueur msgsz, de type msgtyp de la file msgid. Les octets sont rangés à l'adresse msgp. L'entier msgflg indique ce qu'il faut faire si la file est vide (blocage ( 0) ou sortie en échec (IPC-NOWAIT)) ou si le message est plus long que le buffer prévu (troncation ou sortie en erreur). Si msgtyp = 0 alors le système donne le premier message de la file quelque soit son type.
exemple:    
    msgrcv(Num,&unmessage, sizeof(message.text),100L,0)
;
   

int msgctl(int msgid, int cmd, struct msqid_ds* buf) : Permet d'envoyer des commandes de contrôles à la file: cmd=IPC_STATdonne des informations sur la file  (nombre d'éléments dans la file, droits d'accès, etc.) qui seront rangés dans buf; cmd=IPC_RMID détruit la file.
exemples:
    msgctl(Num, IPC_STAT, monbuf);    récupère des informations sur la file et les range dans buf
    semctl(Num, IPC_RMID, NULL);     détruit la file de numéro Num

suivant
     plan