libc/newlib/libc/sys/linux/mqlocal.h

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