Mapeo incorrecto de C struct a Rust
Con fines educativos trato de acceder a laFILE
estructura en óxido:
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);
}
elMY_FILE
struct que obtuve ejecutando bindgen en stdio.h (estoy en OS X):
bindgen /usr/include/stdio.h
De alguna manera_flags
es siempre8
para archivos abiertos en modo de escritura (4 en modo de lectura), por lo que este indicador parece apagado (probé con unC
código para verificar que de hecho no es 4 u 8). Sin embargo, el puntero del archivo parece ser correcto. Que podria causar esto? ¿Extraigo el enlace del archivo de encabezado incorrecto? ¿Hay algo que deba agregar al#[repr(C,)]
¿atributo?
aquí es el código completo que incluye la estructura.
Esta es una pregunta de seguimiento deuna pregunta anterior