此代码:
extern crate libc;
use libc::{O_CREAT, O_RDWR, shm_open};
use std::ffi::CString;
fn shm_create() {
let name = CString::new("/shaman").unwrap().as_ptr();
let fd = unsafe { shm_open(name, O_CREAT|O_RDWR, 0o600 ) };
println!("shm_open: {}", fd);
}
fn main() {
shm_create();
}
始终打印:
shm_open: -1
相同的c实现工作。
我是一个生锈的新手,问题似乎就在那里。
我没有想法......关于可能出现什么问题的任何建议?
答案 0 :(得分:1)
您的代码涉及悬空指针:
let name = CString::new("/shaman").unwrap().as_ptr();
字符串在调用shm_open
时消失了。试试这个:
let name = CString::new("/shaman").unwrap();
let fd = unsafe { shm_open(name.as_ptr(), O_CREAT|O_RDWR, 0o600 ) };