出于教育目的,我尝试访问FILE
Rust 中的结构:
unsafe {
let passwd = libc::fopen("/etc/passwd".to_ptr(), &('r' as libc::c_char));
let fp = &mut *(passwd as *mut MY_FILE);
println!("flags={}, file={}", fp._flags, fp._file);
}
the MY_FILE
我通过在 stdio.h 上运行 bindgen 获得的结构(我在 OS X 上):
bindgen /usr/include/stdio.h
Somehow _flags
总是8
对于以写入模式打开的文件(4 以读取模式打开),因此该标志似乎关闭(我用C
代码来验证它确实不是 4 或 8)。然而文件指针似乎是正确的。什么可能导致这种情况?我是否从错误的头文件中提取了绑定?有什么我需要添加的吗#[repr(C,)]
属性?
Here是包括结构的完整代码。
这是来自的后续问题之前的一个问题
首先,您的实施ToPtr
邀请不健全的代码。转载于此:
// code in italics is wrong
impl ToPtr for str {
fn to_ptr(&self) -> *const i8 {
CString::new(self).unwrap().as_ptr()
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)