这段代码:
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 实现工作。
我是一个 Rust 新手,问题似乎就在那里。
我没主意了……对可能出现的问题有什么建议吗?
最佳答案
您的代码涉及悬空指针:
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 ) };
关于rust shm_open() 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49608550/