首頁 > 軟體

Rust中FFI程式設計知識點整理總結(推薦)

2022-09-16 22:03:47

Rust語言對FFI的支援

Rust 語言主要在關鍵字和標準庫兩個方面對 FFI 提供了支援,具體如下:
關鍵字 extern
屬性 #[no_mangle]
外部塊 ExternBlock 及其屬性 link 和 link_name
標準庫
std:os:raw 模組:例如c_char。
std:ffi 模組:傳遞 UTF-8 字串時,CString和CStr很有用。

libc-crate庫

你可以使用 libc::foo 這種形式存取這個庫中的任何匯出內容。
在Rust裡,只能建立子執行緒,如果想建立子程序,就需要用到libc庫

fn main() {    
unsafe {        
let pid = libc::fork();                                                                                                               if pid > 0 {println!("Hello, I am parent thread: {}", libc::getpid());}   
else if pid == 0 {println!("Hello, I am child thread: {}", libc::getpid());println!("My parent thread: {}", libc::getppid());        }        
else {println!("Fork creation failed!");}}}

1.libc 的所有函數呼叫,都必須放進 unsafe 塊中。因為它的所有呼叫都是 unsafe 的;
2.std 的執行緒操作封裝,好用,形象。libc 的程序操作,與 C 語言系統程式設計一樣,完全是另外一套思路和程式設計風格;
3.std 的執行緒操作雖然簡潔,但是也缺少更細顆粒度的控制。而 libc 可以對程序的操作(及後面對子程序的功能擴充,父程序中的訊號管理等),做到完全的控制,更加靈活,功能強大;
4.std 本身無法實現程序 fork 的功能。
因為我 Rust 的封裝是 zero cost (零成本)的。零成本抽象賦予了 Rust 系統程式設計的能力。

libc 與 std::os:


IT145.com E-mail:sddin#qq.com