美文网首页RUST编程
Rust 编程视频教程(进阶)——025_3 调用不安全的函数或

Rust 编程视频教程(进阶)——025_3 调用不安全的函数或

作者: 令狐壹冲 | 来源:发表于2020-03-04 09:13 被阅读0次

    视频地址

    头条地址:https://www.ixigua.com/i6775861706447913485
    B站地址:https://www.bilibili.com/video/av81202308/

    源码地址

    github地址:https://github.com/anonymousGiga/learn_rust

    讲解内容

    (1)调用方式。不安全函数和方法与常规函数方法十分类似,除了其开头有一个额外的 unsafe。
    例子1:

    unsafe fn dangerous() {
        println!("Do some dangerous thing");
    }
    fn main() {
        unsafe {
            dangerous();
        }
        println!("Hello, world!");
    }
    

    (2)创建不安全代码的安全抽象

    fn foo() {
        let mut num = 5;
        let r1 = &num as *const i32;
        let r2 = &mut num as *mut i32;
        unsafe {
            println!("r1 is: {}", *r1);
            println!("r2 is: {}", *r2);
        }
    }
    fn main() {
        foo();
    }
    

    (3)使用extern函数调用外部代码
    extern关键字,有助于创建和使用 外部函数接口(Foreign Function Interface, FFI)。
    例子1:调用c语言函数

    extern "C" {
        fn abs(input: i32) -> i32;
    }
    
    fn main() {
        unsafe {
            println!("abs(-3): {}", abs(-3));
        }
    }
    

    例子2:c语言调用rust语言
    (a)cargo new foo --lib
    (b)vim src/lib.rs编写代码:

    #![crate_type = "staticlib"]
    #[no_mangle]
    pub extern fn foo(){
        println!("use rust");
    }
    

    编写cargo.toml

    [lib]
    name = "foo"
    crate-type = ["staticlib"]
    

    (c)编译后生成 libfoo.a的静态库
    (d)编写c语言的代码:

    //main.c
    #include <stdint.h>
    #include <stdio.h>
    extern void foo();
    int main() {
        foo();
        return 0;
    }
    

    (e)编译运行:gcc -o main main.c libfoo.a -lpthread -ldl

    相关文章

      网友评论

        本文标题:Rust 编程视频教程(进阶)——025_3 调用不安全的函数或

        本文链接:https://www.haomeiwen.com/subject/hbyplhtx.html