use std::ptr::{addr_of_mut, null_mut};
use libc::{CLOCK_MONOTONIC, timer_create, timer_delete, timer_t};
fn main() {
let mut timer1: timer_t = null_mut();
unsafe {
let r = timer_create(CLOCK_MONOTONIC, null_mut(), addr_of_mut!(timer1));
if r == 0 {
timer_delete(timer1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
调用时timer_create(),生成的定时器 ID 存储在变量中timer1。我将它作为可变指针传递,因此这就是输出变量。
我怎样才能避免像上面的代码中timer1那样初始化null_mut(),因为知道 API 保证它是安全的?
您可以使用MaybeUninit:
use std::mem::MaybeUninit;\nuse std::ptr::null_mut;\n\nuse libc::{CLOCK_MONOTONIC, timer_create, timer_delete, timer_t};\n\nfn main() {\n let mut timer1 = MaybeUninit::<timer_t>::uninit();\n let timer1 = unsafe {\n let r = timer_create(CLOCK_MONOTONIC, null_mut(), timer1.as_mut_ptr());\n if r != 0 {\n panic!("\xe2\x80\xa6");\n }\n timer1.assume_init()\n };\n unsafe {\n timer_delete(timer1);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |