• Home
  • Raw
  • Download

Lines Matching +full:use +full:- +full:libc

7 //! # use std::ffi::CString;
8 //! # use nix::mqueue::*;
9 //! use nix::sys::stat::Mode;
31 //! [Further reading and details on the C API](https://man7.org/linux/man-pages/man7/mq_overview.7.…
33 use crate::errno::Errno;
34 use crate::Result;
36 use crate::sys::stat::Mode;
37 use libc::{self, c_char, mqd_t, size_t};
38 use std::ffi::CStr;
39 use std::mem;
43 pub struct MQ_OFlag: libc::c_int {
58 /// Set the close-on-exec flag for the message queue descriptor.
63 /// A message-queue attribute, optionally used with [`mq_setattr`] and
68 mq_attr: libc::mq_attr,
72 // A safer wrapper around libc::mqd_t, which is a pointer on some platforms
73 // Deliberately is not Clone to prevent use-after-close scenarios
88 pub type mq_attr_member_t = libc::c_long;
95 /// - `mq_flags`: Either `0` or `O_NONBLOCK`.
96 /// - `mq_maxmsg`: Maximum number of messages on the queue.
97 /// - `mq_msgsize`: Maximum message size in bytes.
98 /// - `mq_curmsgs`: Number of messages currently in the queue.
104 ) -> MqAttr { in new()
105 let mut attr = mem::MaybeUninit::<libc::mq_attr>::uninit(); in new()
119 pub const fn flags(&self) -> mq_attr_member_t { in flags()
124 pub const fn maxmsg(&self) -> mq_attr_member_t { in maxmsg()
129 pub const fn msgsize(&self) -> mq_attr_member_t { in msgsize()
134 pub const fn curmsgs(&self) -> mq_attr_member_t { in curmsgs()
149 ) -> Result<MqdT> { in mq_open()
152 libc::mq_open( in mq_open()
155 mode.bits() as libc::c_int, in mq_open()
156 &mq_attr.mq_attr as *const libc::mq_attr, in mq_open() constant
159 None => unsafe { libc::mq_open(name.as_ptr(), oflag.bits()) }, in mq_open()
167 pub fn mq_unlink(name: &CStr) -> Result<()> { in mq_unlink()
168 let res = unsafe { libc::mq_unlink(name.as_ptr()) }; in mq_unlink()
175 pub fn mq_close(mqdes: MqdT) -> Result<()> { in mq_close()
176 let res = unsafe { libc::mq_close(mqdes.0) }; in mq_close()
187 ) -> Result<usize> { in mq_receive()
190 libc::mq_receive( in mq_receive()
203 pub fn mq_send(mqdes: &MqdT, message: &[u8], msq_prio: u32) -> Result<()> { in mq_send()
205 libc::mq_send( in mq_send()
218 pub fn mq_getattr(mqd: &MqdT) -> Result<MqAttr> { in mq_getattr()
219 let mut attr = mem::MaybeUninit::<libc::mq_attr>::uninit(); in mq_getattr()
220 let res = unsafe { libc::mq_getattr(mqd.0, attr.as_mut_ptr()) }; in mq_getattr()
230 /// It is recommend to use the `mq_set_nonblock()` and `mq_remove_nonblock()` convenience functions…
233 pub fn mq_setattr(mqd: &MqdT, newattr: &MqAttr) -> Result<MqAttr> { in mq_setattr()
234 let mut attr = mem::MaybeUninit::<libc::mq_attr>::uninit(); in mq_setattr()
236 libc::mq_setattr( in mq_setattr()
238 &newattr.mq_attr as *const libc::mq_attr, in mq_setattr() constant
253 pub fn mq_set_nonblock(mqd: &MqdT) -> Result<MqAttr> { in mq_set_nonblock()
267 pub fn mq_remove_nonblock(mqd: &MqdT) -> Result<MqAttr> { in mq_remove_nonblock()