ronnie
2022-10-23 e4b2278a4015864069fc7b2eb574f5aeb7736bc6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#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 */