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__"
|
|
|