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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
/// ipcs ctl commands pub const MSG_STAT: i32 = 11; pub const MSG_INFO: i32 = 12; pub const MSG_STAT_ANY: i32 = 13; /// msgrcv options /// no error if message is too big pub const MSG_NOERROR: i32 = 0o10000; /// recv any msg except of specified type. pub const MSG_EXCEPT: i32 = 0o20000; /// copy (not remove) all queue messages pub const MSG_COPY: i32 = 0o40000; /// Obsolete, used only for backwards compatibility and libc5 compiles #[repr(C)] //pub struct msqid_ds_t { // pub msg_perm: ipc_perm_t, // /// first message on queue,unused // pub msg_first: *mut msg_t, // /// last message in queue,unused // pub msg_last: *mut msg_t, // /// last msgsnd time // pub msg_stime: time_t, // /// last msgrcv time // pub msg_rtime: time_t, // /// last change time // pub msg_ctime: time_t, // /// Reuse junk fields for 32 bit // pub msg_lcbytes: usize, // /// ditto // pub msg_lqbytes: usize, // /// current number of bytes on queue // pub msg_cbytes: u16, // /// number of messages in queue // pub msg_qnum: u16, // /// max number of bytes on queue // pub msg_qbytes: u16, // /// pid of last msgsnd // pub msg_lspid: ipc_pid_t, // /// last receive pid // pub msg_lrpid: ipc_pid_t, //} /// message buffer for msgsnd and msgrcv calls #[repr(C)] pub struct msgbuf_t { /// type of message pub mtype: isize, /// message text pub mtext: [u8; 1], } /// buffer for msgctl calls IPC_INFO, MSG_INFO #[repr(C)] pub struct msginfo_t { pub msgpool: i32, pub msgmap: i32, pub msgmax: i32, pub msgmnb: i32, pub msgmni: i32, pub msgssz: i32, pub msgtql: i32, pub msgseg: u16, } /// MSGMNI, MSGMAX and MSGMNB are default values which can be /// modified by sysctl. /// /// MSGMNI is the upper limit for the number of messages queues per /// namespace. /// It has been chosen to be as large possible without facilitating /// scenarios where userspace causes overflows when adjusting the limits via /// operations of the form retrieve current limit; add X; update limit". /// /// MSGMNB is the default size of a new message queue. Non-root tasks can /// decrease the size with msgctl(IPC_SET), root tasks /// (actually: CAP_SYS_RESOURCE) can both increase and decrease the queue /// size. The optimal value is application dependent. /// 16384 is used because it was always used (since 0.99.10) /// /// MAXMAX is the maximum size of an individual message, it's a global /// (per-namespace) limit that applies for all message queues. /// It's set to 1/2 of MSGMNB, to ensure that at least two messages fit into /// the queue. This is also an arbitrary choice (since 2.6.0). /// <= IPCMNI, max # of msg queue identifiers pub const MSGMNI: i32 = 32000; /// <= INT_MAX, max size of message (bytes) pub const MSGMAX: i32 = 8192; /// <= INT_MAX, default max size of a message queue pub const MSGMNB: i32 = 16384; /// unused pub const MSGPOOL: i32 = (MSGMNI * MSGMNB / 1024); /* size in kbytes of message pool */ /// number of system message headers pub const MSGTQL: i32 = MSGMNB; /// number of entries in message map pub const MSGMAP: i32 = MSGMNB; /// message segment size pub const MSGSSZ: i32 = 16; /// max no. of segments pub const MSGSEG: i32 = ((MSGPOOL * 1024) / MSGSSZ); //pub const MSGSEG: i32 = (MSGSEG <= 0xffff ? MSGSEG : 0xffff)