1 #ifndef _LINUX_MSG_H 2 #define _LINUX_MSG_H 3 4 #include <linux/list.h> 5 #include <uapi/linux/msg.h> 6 7 /* one msg_msg structure for each message */ 8 struct msg_msg { 9 struct list_head m_list; 10 long m_type; 11 size_t m_ts; /* message text size */ 12 struct msg_msgseg *next; 13 void *security; 14 /* the actual message follows immediately */ 15 }; 16 17 /* one msq_queue structure for each present queue on the system */ 18 struct msg_queue { 19 struct kern_ipc_perm q_perm; 20 time_t q_stime; /* last msgsnd time */ 21 time_t q_rtime; /* last msgrcv time */ 22 time_t q_ctime; /* last change time */ 23 unsigned long q_cbytes; /* current number of bytes on queue */ 24 unsigned long q_qnum; /* number of messages in queue */ 25 unsigned long q_qbytes; /* max number of bytes on queue */ 26 pid_t q_lspid; /* pid of last msgsnd */ 27 pid_t q_lrpid; /* last receive pid */ 28 29 struct list_head q_messages; 30 struct list_head q_receivers; 31 struct list_head q_senders; 32 }; 33 34 /* Helper routines for sys_msgsnd and sys_msgrcv */ 35 extern long do_msgsnd(int msqid, long mtype, void __user *mtext, 36 size_t msgsz, int msgflg); 37 extern long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, 38 int msgflg, 39 long (*msg_fill)(void __user *, struct msg_msg *, 40 size_t)); 41 42 #endif /* _LINUX_MSG_H */ 43