rust shm_open() 函数失败

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

我是一个 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/

相关文章:

msvcrt - Windows 下的 MSVCRT 是否像 *nix 下的 glibc (libc)?

C++:如何将 libc 声明强制为 std::?

c - 传递 ‘strncmp’ 的参数 1 从整数生成指针,无需强制转换 C 编程

rust - 如何在 if-let 语句中将复制的变量引入为可变变量?

struct - 返回对一个结构的部分的引用作为另一个结构的字段

io - 未实现 Seek 时如何从 std::io::Read 特性中推进数据?

linux - IPC Unix 域套接字 bash

c - fork 的流量,我有多少个 fork ?

rust - 为什么在基于类型实现宏时需要在 <$a> 中使用尖括号?

go - 从命名管道读取不会提供任何输出,并且会无限期地阻塞代码