libc
库的shell。我使用了一个Vec<String>
来保存要传递给execvp()
的参数,但似乎我的转换为char **
并不成功。在执行时,所有参数都变成了空字符串。以下是涉及到的代码片段。
fn safe_execvp(path: String, argv: Vec<String>) -> Result<(), i32> {
unsafe {
let c_path = CString::new(path.as_str()).unwrap();
let mut c_argv_vec = Vec::new();
for arg in &argv {
let c_arg = CString::new(arg.as_str()).unwrap().as_ptr();
c_argv_vec.push(c_arg);
}
c_argv_vec.push(std::ptr::null());
match execvp(c_file.as_ptr(), c_argv_vec.as_ptr()) {
num => Err(num),
}
}
}
execvp
是C语言库函数,定义如下:fn execvp(file: *const i8, argv: *const*const i8) -> i32;
。
我不确定我做错了什么。是因为在调用execvp()
之前释放了参数的内存吗?
CString
放在一个向量中。 - Jianzhong Liu