首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rust中使用nix::mount::mount()替换为libc::mount()

如何在Rust中使用nix::mount::mount()替换为libc::mount()
EN

Stack Overflow用户
提问于 2020-11-05 15:49:01
回答 1查看 180关注 0票数 1

我想在Rust FFI中使用'nix‘库替换为'libc’。

我想使用nix::mount::mount()替换为libc::mount()。现在我有了以下代码:

代码语言:javascript
复制
libc::mount(ptr::null(), path.as_ptr(), ptr::null(), libc:: MS_SLAVE, ptr::null())

我只是想知道如何替换nix库中的ptr::null(),我尝试使用'None‘来做,但失败了。请帮帮我,谢谢。

显示错误:

代码语言:javascript
复制
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`
EN

回答 1

Stack Overflow用户

发布于 2020-11-05 20:34:35

nix::mount::mount有函数签名:

代码语言:javascript
复制
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<()>

如您所见,参数sourcefstypedata接受泛型类型参数的选项。如果传入Some(value),则可以根据value的类型推断这些类型参数,但是如果传入None,编译器就没有足够的信息来推断这些参数的类型。

您可以显式地将参数类型指定为实现NixPath的某种类型,如Path

代码语言:javascript
复制
nix::mount::mount<Path, Path, Path, Path>(None, path, None, MsFlags::MS_SLAVE, None)

或者,您可以直接在None上指定类型参数

代码语言:javascript
复制
nix::mount::mount(None::<Path>, path, None::<Path>, MsFlags::MS_SLAVE, None::<Path>)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64693079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档