Function nc::mq_timedsend
source · pub unsafe fn mq_timedsend(
mqdes: mqd_t,
msg: &[u8],
msg_prio: u32,
abs_timeout: ×pec_t,
) -> Result<(), Errno>
Expand description
Send message to a message queue.
§Examples
let name = "nc-mq-timedsend";
let ret = unsafe {
nc::mq_open(
name,
nc::O_CREAT | nc::O_RDWR,
(nc::S_IRUSR | nc::S_IWUSR) as nc::umode_t,
None,
)
};
assert!(ret.is_ok());
let mq_id = ret.unwrap();
let mut attr = nc::mq_attr_t::default();
let ret = unsafe { nc::mq_getsetattr(mq_id, None, Some(&mut attr)) };
assert!(ret.is_ok());
let msg = "Hello, Rust";
let prio = 0;
let timeout = nc::timespec_t {
tv_sec: 1,
tv_nsec: 0,
};
let ret = unsafe { nc::mq_timedsend(mq_id, msg.as_bytes(), prio, &timeout) };
assert!(ret.is_ok());
let ret = unsafe { nc::mq_getsetattr(mq_id, None, Some(&mut attr)) };
assert!(ret.is_ok());
assert_eq!(attr.mq_curmsgs, 1);
let ret = unsafe { nc::close(mq_id) };
assert!(ret.is_ok());
let ret = unsafe { nc::mq_unlink(name) };
assert!(ret.is_ok());
Examples found in repository?
examples/mq.rs (line 29)
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
fn main() {
let name = "nc-mq-notify";
let ret = unsafe {
nc::mq_open(
name,
nc::O_CREAT | nc::O_RDWR | nc::O_EXCL,
(nc::S_IRUSR | nc::S_IWUSR) as nc::umode_t,
None,
)
};
assert!(ret.is_ok());
let mq_id = ret.unwrap();
let mut attr = nc::mq_attr_t::default();
let ret = unsafe { nc::mq_getsetattr(mq_id, None, Some(&mut attr)) };
assert!(ret.is_ok());
println!("attr: {:?}", attr);
let msg = "Hello, Rust";
let prio = 42;
let timeout = nc::timespec_t {
tv_sec: 1,
tv_nsec: 0,
};
let ret = unsafe { nc::mq_timedsend(mq_id, msg.as_bytes(), prio, &timeout) };
assert!(ret.is_ok());
let ret = unsafe { nc::mq_getsetattr(mq_id, None, Some(&mut attr)) };
assert!(ret.is_ok());
assert_eq!(attr.mq_curmsgs, 1);
let mut buf = vec![0_u8; attr.mq_msgsize as usize];
let mut recv_prio = 0;
let read_timeout = nc::timespec_t {
tv_sec: 1,
tv_nsec: 0,
};
let ret = unsafe { nc::mq_timedreceive(mq_id, &mut buf, &mut recv_prio, &read_timeout) };
if let Err(errno) = ret {
eprintln!("mq_timedreceive() error: {}", nc::strerror(errno));
}
assert!(ret.is_ok());
let n_read = ret.unwrap() as usize;
assert_eq!(n_read, msg.len());
let ret = unsafe { nc::close(mq_id) };
assert!(ret.is_ok());
let ret = unsafe { nc::mq_unlink(name) };
assert!(ret.is_ok());
}