生锈shm_open()函数失败

时间:2018-04-02 09:19:55

标签: rust ipc libc

此代码:

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实现工作。

我是一个生锈的新手,问题似乎就在那里。

我没有想法......关于可能出现什么问题的任何建议?

1 个答案:

答案 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 ) };