gpt4 book ai didi

c++ - 在 mac 上使用 osxfuse 卡住的 loggedfs

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:39 26 4
gpt4 key购买 nike

我想记录指定目录的每个系统调用,我找到了这个存储库 https://github.com/rflament/loggedfs

它创建了一个带有 fuse 的虚拟文件系统,并将所有内容记录在其中,就像我想要的那样。

我试图将它移植到 mac 上,但它使用了一个在 osx 上不起作用的“技巧”。 lstat 卡住了 10 秒并崩溃。

我想知道为什么?

这是我代码的主要部分:

//  g++ -Wall main.cpp `pkg-config fuse --cflags --libs` -o hello

#define FUSE_USE_VERSION 26

#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

static char *path;
static int savefd;

static int getattr(const char *path, struct stat *stbuf)
{
int res;
char rPath[1024];

strcpy(rPath, "."); strcat(rPath, path);

res = lstat(rPath, stbuf); // Mac stuck here
return (res == -1 ? -errno : 0);
}

static void* loggedFS_init(struct fuse_conn_info* info)
{
fchdir(savefd); close(savefd); return NULL;
}

int main(int argc, char *argv[])
{
struct fuse_operations oper;

bzero(&oper, sizeof(fuse_operations));
oper.init = loggedFS_init;
oper.getattr = getattr;

path = strdup(argv[argc - 1]);
printf("chdir to %s\n", path);
chdir(path);
savefd = open(".", 0);

return fuse_main(argc, argv, &oper, NULL);
}

最佳答案

我仔细查看了 LoggedFS 并使用 pjdfstest 测试了它的 POSIX 合规性。 ,导致 3 issues (or groups of issues) .我结束了 re-implementing it in Python ,完全符合 POSIX 标准。我还没有在 OS X 上测试过它,所以我很乐意收到一些反馈 ;)

您提到的“技巧”可能是您问题的根本原因,但我不完全确定。它通过向路径添加另一个字符导致一个根本问题,当 path 的长度接近 PATH_MAX 时会导致问题。 libfuse 已经将带有前导 / 的路径传递给 FUSE 操作。额外的 . 加上“误导” / (已挂载文件系统的根目录,而不是“全局”根文件夹)是两个字符“太多”,有效地减少了最大允许的路径长度为 PATH_MAX 减 2。我探索了更改 PATH_MAX 的选项,并通知用户陆地软件有关较小的 PATH_MAX,turned out to be impossible .

不过,还是有办法的。不要在 init 例程中关闭文件描述符 savefd。保持打开状态,而不是在 destroy routine 中关闭它,当文件系统被卸载时,它会被 FUSE 调用。您实际上可以使用 savefd 来指定相对于它的路径。然后,您可以使用 fstatat(LinuxOS X / BSD)代替 lstat。它的原型(prototype)是这样的:

int fstatat(int dirfd, const char *pathname, struct stat *buf,
int flags);

你必须将 savefd 传递给 dirfd 并在传递之前从 path 的内容中删除前导的 /它进入 pathname

关于c++ - 在 mac 上使用 osxfuse 卡住的 loggedfs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41941630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com