/* fichier test_msgctl.c */ /* * le programme recupere l'identificateur d'une file existante (creee * avec test_msgget.c) et affiche la structure msqid_ds associee a la file */ #include #include #include #include #include #include #include #define CLE 123 main() { struct msqid_ds buf ; char *path = "nom2_de_fichier_existant" ; int msqid ; /* recuperation de l'identificateur de la file de messages de cle 123 */ if (( msqid = msgget(ftok(path,(key_t)CLE),0)) == -1 ) { perror ("Erreur msgget()") ; exit(1) ; } /* on recupere dans la structure buf les parametres de al file */ if (msgctl(msqid,IPC_STAT,&buf) == -1){ perror("Erreur msgctl()") ; exit(1) ; } else { printf("id de la file de messages : %d\n",msqid) ; printf("id du proprietaire : %d\n",buf.msg_perm.uid) ; printf("id du groupe du proprietaire : %d\n",buf.msg_perm.gid) ; printf("id du createur : %d\n",buf.msg_perm.cuid) ; printf("id du groupe du createur : %d\n",buf.msg_perm.cgid) ; printf("droits d'acces : %d\n",buf.msg_perm.mode) ; printf("nb courant d'octets dans la file : %d\n",buf.msg_cbytes) ; printf("nb de messages dans la file : %d\n",buf.msg_qnum) ; printf("nb maximal d'octets de la file : %d\n",buf.msg_qbytes) ; printf("pid du dernier ecrivain : %d\n",buf.msg_lspid) ; printf("pid du dernier lecteur : %d\n",buf.msg_lrpid) ; printf("date de la derniere ecriture : %s\n",ctime(&buf.msg_stime)) ; printf("date de la derniere lecture : %s\n",ctime(&buf.msg_rtime)) ; printf("date du dernier changement : %s\n",ctime(&buf.msg_ctime)) ; } }