48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
| /* local definitions needed by mq routines */
 | |
| 
 | |
| #include <sys/msg.h>
 | |
| #include <signal.h>
 | |
| 
 | |
| /* a message */
 | |
| typedef struct
 | |
| {
 | |
|   unsigned int type;
 | |
|   char text[1];
 | |
| } MSG; 
 | |
| 
 | |
| union semun {
 | |
|   int val;
 | |
|   struct semid_ds *buf;
 | |
|   unsigned short  *array;
 | |
| } arg;
 | |
| 
 | |
| /*
 | |
|  * One of these structures is malloced to describe any open message queue
 | |
|  * each time mq_open is called. 
 | |
|  */
 | |
| 
 | |
| struct libc_mq;
 | |
| 
 | |
| struct libc_mq {
 | |
|   int              index;          /* index of this message queue */
 | |
|   int              msgqid;         /* value returned by msgget */
 | |
|   int              semid;          /* semaphore id */
 | |
|   int              fd;             /* fd of shared memory file */
 | |
|   int              oflag;          /* original open flag used */
 | |
|   int              th;             /* thread id for mq_notify */
 | |
|   char            *name;           /* name used */
 | |
|   MSG             *wrbuf;          /* msg write buffer */
 | |
|   MSG             *rdbuf;          /* msg read buffer */
 | |
|   struct mq_attr  *attr;           /* pointer to attribute structure */
 | |
|   struct sigevent *sigevent;       /* used for mq_notify */
 | |
|   void (*cleanup_notify)(struct libc_mq *); /* also used for mq_notify */
 | |
|   struct libc_mq  *next;           /* next info struct in hash table */
 | |
| };
 | |
| 
 | |
| extern struct libc_mq *__find_mq (mqd_t mq);
 | |
| extern void __cleanup_mq (mqd_t mq);
 | |
| extern void __cleanup_mq_notify (struct libc_mq *ptr);
 | |
| 
 | |
| #define MSGQ_PREFIX "/dev/shm/__MSGQ__"
 | |
| 
 |