【问题标题】:rust shm_open() function failedrust shm_open() 函数失败
【发布时间】:2018-04-02 09:19:55
【问题描述】:

这段代码:

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 ipc libc


    【解决方案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 ) };
    

    【讨论】:

    • 太棒了,它有效。将尝试了解 dandling 指针背后的内容。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2021-11-29
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多