|  | #ifndef _LINUX_MSG_H | 
|  | #define _LINUX_MSG_H | 
|  |  | 
|  | #include <linux/list.h> | 
|  | #include <uapi/linux/msg.h> | 
|  |  | 
|  | /* one msg_msg structure for each message */ | 
|  | struct msg_msg { | 
|  | struct list_head m_list; | 
|  | long m_type; | 
|  | size_t m_ts;		/* message text size */ | 
|  | struct msg_msgseg *next; | 
|  | void *security; | 
|  | /* the actual message follows immediately */ | 
|  | }; | 
|  |  | 
|  | /* one msq_queue structure for each present queue on the system */ | 
|  | struct msg_queue { | 
|  | struct kern_ipc_perm q_perm; | 
|  | time_t q_stime;			/* last msgsnd time */ | 
|  | time_t q_rtime;			/* last msgrcv time */ | 
|  | time_t q_ctime;			/* last change time */ | 
|  | unsigned long q_cbytes;		/* current number of bytes on queue */ | 
|  | unsigned long q_qnum;		/* number of messages in queue */ | 
|  | unsigned long q_qbytes;		/* max number of bytes on queue */ | 
|  | pid_t q_lspid;			/* pid of last msgsnd */ | 
|  | pid_t q_lrpid;			/* last receive pid */ | 
|  |  | 
|  | struct list_head q_messages; | 
|  | struct list_head q_receivers; | 
|  | struct list_head q_senders; | 
|  | }; | 
|  |  | 
|  | /* Helper routines for sys_msgsnd and sys_msgrcv */ | 
|  | extern long do_msgsnd(int msqid, long mtype, void __user *mtext, | 
|  | size_t msgsz, int msgflg); | 
|  | extern long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, | 
|  | int msgflg, | 
|  | long (*msg_fill)(void __user *, struct msg_msg *, | 
|  | size_t)); | 
|  |  | 
|  | #endif /* _LINUX_MSG_H */ |