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