我想在Rust FFI中使用'nix‘库替换为'libc’。
我想使用nix::mount::mount()替换为libc::mount()。现在我有了以下代码:
libc::mount(ptr::null(), path.as_ptr(), ptr::null(), libc:: MS_SLAVE, ptr::null())我只是想知道如何替换nix库中的ptr::null(),我尝试使用'None‘来做,但失败了。请帮帮我,谢谢。
显示错误:
39 | nix::mount::mount(
| ^^^^^^^^^^^^^^^^^ cannot infer type for type parameter `P1` declared on the function `mount`
|
::: /root/.cargo/registry/src/mirrors.ustc.edu.cn-15f9db60536bad60/nix-0.19.0/src/mount.rs:57:27
|
57 | pub fn mount<P1: ?Sized + NixPath, P2: ?Sized + NixPath, P3: ?Sized + NixPath, P4: ?Sized + NixPath>(
| ------- required by this bound in `nix::mount::mount`
|
= note: cannot satisfy `_: nix::NixPath`发布于 2020-11-05 20:34:35
nix::mount::mount有函数签名:
pub fn mount<P1: ?Sized + NixPath, P2: ?Sized + NixPath, P3: ?Sized + NixPath, P4: ?Sized + NixPath>(
source: Option<&P1>,
target: &P2,
fstype: Option<&P3>,
flags: MsFlags,
data: Option<&P4>
) -> Result<()>如您所见,参数source、fstype和data接受泛型类型参数的选项。如果传入Some(value),则可以根据value的类型推断这些类型参数,但是如果传入None,编译器就没有足够的信息来推断这些参数的类型。
您可以显式地将参数类型指定为实现NixPath的某种类型,如Path
nix::mount::mount<Path, Path, Path, Path>(None, path, None, MsFlags::MS_SLAVE, None)或者,您可以直接在None上指定类型参数
nix::mount::mount(None::<Path>, path, None::<Path>, MsFlags::MS_SLAVE, None::<Path>)https://stackoverflow.com/questions/64693079
复制相似问题