【问题标题】:why lstat() not work in the fuse-mounted directory?为什么 lstat() 在 fuse-mounted 目录中不起作用?
【发布时间】:2012-06-05 07:45:53
【问题描述】:

我有一个由 fuse 挂载的目录,我打算对这个目录使用 lstat()。但是,当我运行以下代码时,它只是在那里等待并且什么都不提示。 顺便说一句,我在安卓模拟器中运行保险丝。 代码是:

#include <sys/stat.h>
#include <stdio.h>

void main(){
    printf("new test!!!");
    char *path="/data/pwrite/test_12/";
    struct stat *stbuf;
    int res=12;
    res=lstat(path, stbuf);
    printf("%d",res);
}

并且,“/data/pwrite/test_12/”是fuse挂载的目录。更重要的是,当我尝试另一个共享相同父目录但没有被fuse挂载的目录时,如/data/pwrite/test_13/,有用! 所以,我确定它是由fuse引导的。但是,我更困惑的是是否是由于fuse和android之间的冲突。 有什么想法吗?thx

【问题讨论】:

  • lstat 返回-1,然后使用例如strerrorperror 看看错误是什么。
  • 但是,当代码到达 lstat() 时它挂起。所以,如果我使用它旁边的 perror(),它不会提示任何内容。
  • 可能是因为您传递给lstat 的指针没有指向任何东西。

标签: android linux android-emulator linux-kernel fuse


【解决方案1】:

尝试排除错误,看看是否效果更好。

#include <sys/stat.h>
#include <stdio.h>

void main(){
    printf("new test!!!\n");
    const char *path="/data/pwrite/test_13/";
    struct stat stbuf; 
    int res=12;
    res=lstat(path, &stbuf);
    printf("%d\n",res);
}

【讨论】:

  • 真正的问题不是代码本身。当我切换到另一个没有被保险丝挂载的文件夹时,一切都会好起来的!
  • 如果您使用包含大量错误和未定义行为的代码进行测试,您将无法判断问题出在哪里。例如,您的代码将stbuf 的值传递给lstat,即使它从未将stbuf 初始化为任何特定的值。
  • 是的,你的 right.c 与 java 不同。但是问题仍然存在,如果我使用你的代码进行测试。还有什么想法吗?thx
  • 你到底想做什么?
  • 我需要通过 fuse 在 android 中指定我的文件系统。并且,在其中,我需要包装通用系统调用,如 lsstat 来实现我自己的。但是,如果通用系统调用出错,似乎没有办法走得更远了。
【解决方案2】:

为什么它不起作用?因为目前有几个 fuse-deamon 运行。

【讨论】:

    猜你喜欢
    • 2015-05-31
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多