【问题标题】:Is there a way to use functions from unistd.h in Rust code?有没有办法在 Rust 代码中使用 unistd.h 中的函数?
【发布时间】:2016-06-05 14:01:36
【问题描述】:

我正在尝试实现一个 malloc 类型的函数,但我不知道要使用什么来代替 unistd.h 中 C 的 sbrk 函数。有没有办法将 unistd.h 转换为 Rust 程序?

【问题讨论】:

    标签: rust ffi sbrk


    【解决方案1】:

    The Rust Programming Language 这本书是关于 FFI 的一些好信息。如果您使用libccargo,您可以使用类似以下的内容。

    extern crate libc;
    
    use libc;
    
    extern {
        fn sbrk(x: usize) -> *mut libc::c_void;
    }
    
    fn call_sbrk(x: usize) -> *mut libc::c_void {
        unsafe {
            sbrk(x)
        }
    }
    
    fn main() {
        let x = call_sbrk(42);
        println!("{:p}", x);
    }
    

    在您的 Cargo.toml 中包含类似以下内容

    [dependencies]
    libc = "^0.2.7"
    

    【讨论】:

    • 感谢你抓住我的懒惰!该帖子已被编辑。
    • 干杯,太棒了 - 我很接近,但我认为我需要一些 #[link(name = "")] 的东西,但不知道该放什么名字。
    • 如果您正在编写分配器,您可能还对 Rust 的这一章感兴趣 Custom Allocators
    • @DanielRobertson 这看起来是一个有趣的章节,一旦我整理好我的分配器,我将不得不给它一个上帝。我现在在使用全局变量和 FFI 时遇到了一些麻烦——我已经按照章节进行了操作,但是链接器说它们是未定义的,但名称前面有一个下划线。例如PROT_WRITE 显示为 _PROT_WRITE。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多