我正在尝试使用 Rust 从 ISO 映像中读取内容。我已经在我的 Linux 机器上安装libiso9660-dev
并libcdio-dev
访问头文件。Libiso9660是一个用于处理ISO9660
文件系统(开发文件)的库。我使用bindgen生成到库的绑定。到目前为止,一切都非常简单。
这是与我的代码相关的绑定部分:
extern "C" {
pub fn iso9660_open(psz_path: *const ::std::os::raw::c_char) -> *mut iso9660_t;
}
extern "C" {
pub fn iso9660_ifs_get_application_id(
p_iso: *mut iso9660_t,
p_psz_app_id: *mut *mut cdio_utf8_t,
) -> ::std::os::raw::c_uchar;
}
下一步是使用生成的绑定。以下是相关代码:
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
use std::os::raw::{c_char};
use std::ffi::{CString};
use std::ptr;
pub fn open_image(path: &str) {
let c_str = CString::new(path).unwrap();
let psz_path = c_str.as_ptr() as *const c_char;
let image = unsafe { iso9660_open(psz_path) };
get_image_info(image);
}
fn get_image_info(image: *mut iso9660_t) {
println!("Getting image info...");
let ptr_null = ptr::null_mut();
let app_info = unsafe { iso9660_ifs_get_application_id(image, ptr_null) };
// here is the "segmentation fault (core dumped)"
}
这是我想在 Rust 中复制的示例(第 89 行是我现在所在的位置)。
open_image
似乎正在工作,但是当我调用 iso9660_ifs_get_application_id
. 我假设我没有因为类型而调用该方法,但除此之外,我什么都没有。任何提示或帮助将不胜感激。谢谢!