问题标签 [fuse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在线程模式下运行的 FUSE 问题
我已经编写了一个文件系统,FUSE
并且一切都在单线程模式(-s
标志)下按预期工作。
在常规线程模式下,如果我发出open()
then read()
,操作可以工作,但文件系统似乎挂起。我在前台运行它并且ctrl-c
不做任何事情。但是,如果我运行任何稳定的操作,例如,ls
我可以正常关闭。FUSE
ctrl-c
有没有办法调试这个问题,或者有人知道从哪里开始寻找错误?
java - 在 Java 中使用 FUSE 库;试图复制 hello.c 示例
我正在尝试使用JNA创建与 FUSE 库的绑定,但我在路上遇到了障碍。我已经尽可能地最小化了代码,以便在这里可以消化。
FUSE 库附带了一些用 C 编写的示例文件系统。其中最简单的是hello.c
. 以下是其代码的最小化版本,仅在文件系统函数中进行了一些打印:
hello.c
:
这可以使用编译gcc -Wall hello.c -o hello -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -pthread -lfuse -lrt -ldl
并调用./hello.c -f /some/mount/point
-f
标志是让它留在前台,这样你就可以看到' printf()
s 的工作。
所有这些都运行良好,您可以看到printf()
' 正常执行。我正在尝试使用 JNA 在 Java 中复制相同的内容。这是我想出的:
FuseTemp.java
:
这可以使用以下方法编译:javac -cp path/to/jna.jar FuseTemp.java
并使用java -cp path/to/jna.jar:. FuseTemp
出现的错误是:fusermount: failed to access mountpoint /some/mount/point: Permission denied
。
我在同一个挂载点文件夹上以具有相同权限的同一个用户身份执行这两个程序,并且我在该fuse
组中。我在用:
- Linux 内核 3.0.0
- 保险丝 2.8.4
- OpenJDK 1.6.0_23
- JNA 3.4.0
所以我的问题是:这两个程序(hello.c
和FuseTemp.java
)之间到底有什么不同,以及如何让它们做同样的事情?
提前致谢。
编辑:这是一些附加信息。
stat
挂载点的初始值:
我以普通用户身份运行 Java 程序得到的输出:
在此之后,尝试执行stat
会给出以下错误消息:
stat: cannot stat
/some/mount/point':传输端点未连接`
那是因为 Java 程序不再运行,所以 fuse 不能调用它的回调。要卸载,如果我尝试fusermount -u /some/mount/point
,我会得到:
如果我尝试sudo fusermount -u /some/mount/point
,挂载点已成功卸载,并且没有输出fusermount
。/etc/mtab
是 chmod'd 644 ( -rw-r--r--
) 所以我的用户可以阅读它,但它不包含/some/mount/point
. 成功卸载后,挂载点恢复到其旧权限(777 目录)。
现在,以 root 身份运行 java 程序:
之后,stat
ing/some/mount/point
显示is没有被修改,即仍然是777目录。
我还重写FuseTemp.java
了将所有Callback
s 包含为Callback
s 而不是Pointer
s。但是,行为是相同的。
我查看了 fuse 的源代码,错误代码 1 可以在整个执行过程中的多个点返回。我将查明保险丝端究竟在哪里发生故障并在这里报告。
现在对于hello.c
: 以普通用户身份运行它,从相同的权限开始/some/mount/point
并传递参数-f
and /some/mount/point
,程序一开始不会打印任何输出,但会继续运行。在挂载点上运行stat
时,程序会打印
应该的。stat
返回一个错误,但这仅仅是因为hello.c
'getattr
函数没有给它任何信息,所以那里没有问题。以普通用户身份执行后fusermount -u /some/mount/point
,程序以返回码 0 退出,卸载成功。
以 root 身份运行它,以相同的权限开始/some/mount/point
并传递参数-f
and /some/mount/point
,程序一开始不会打印任何输出,但会继续运行。在挂载点上运行stat
时,我收到权限错误,因为我不是 root。当stat
以 root 身份运行时,程序会打印
应该的。以普通用户身份执行fusermount -u /some/mount/point
产生
以root身份执行fusermount
,程序退出,返回码0,卸载成功。
fuse - libfuse:退出 fuse_session_loop
上下文:Ubuntu 11.10 和 libfuse 2.8.4-1.4ubuntu1 Linux 3.0.0-14-generic #23-Ubuntu SMP Mon Nov 21 20:28:43 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
我正在尝试使用 libfuse。我想让 fuse_session_loop 退出(从信号处理程序或不同的线程),但是当我调用 fuse_session_exit 时,在会话收到新请求之前什么都不会发生。
fuse_session_exit 设置一个由 fuse_session_exited 读取的标志。调试到 fuse_session_loop 它似乎阻塞了 fuse_chan_recv,所以它不会再次检查 fuse_session_exited 直到循环的顶部......
fuse_chan_recv 调用 fuse_kern_chan_receive 阻塞“/dev/fuse”设备的“read”系统调用,因此即使设置了 fuse_session_exited 标志,也没有任何反应。
这个问题似乎影响了 libfuse 提供的 hello_ll.c 示例以及我的程序。这让我觉得也许有一些机制不应该起作用。也许 fuse_session_exit 也应该做一些中断读取调用的事情,由于某种原因在我的系统上不起作用。
有任何想法吗?
linux - 内存 FUSE 文件系统
编写一个存储在内存中的简单 FUSE 文件系统。文件系统必须支持以下命令:
ls, mkdir, cp
这个问题最近在一次采访中被问到,我无法回答。所以我决定学习它。
做了一些搜索,找到了一些关于构建我自己的 FUSE 文件系统的指南。我对如何在内存中实现文件系统一无所知。
我的问题是
- 我是否朝着正确的方向前进?
- 我还应该阅读什么?
- 解决办法是什么 ?
我正在阅读的链接:
- http://fuse.sourceforge.net/
- http://www.ibm.com/developerworks/linux/library/l-fuse/
- http://pramode.net/articles/lfy/fuse/pramode.html
- http://revista.python.org.ar/3/en/html/python_en_tu_fs.html
- http://pysnippet.blogspot.com/2009/11/fuse-filesystem-in-userspace-part-1.html
- 使用 FUSE 在 python 中创建一个临时文件
- http://www.willmcgugan.com/blog/tech/2011/3/20/creating-a-virtual-filesystem-with-python-and-why-you-need-one/
在最后一个链接中,提到了PyFileSystem的内存缓存。我不确定这有什么帮助。
PS:这是一个书面面试问题,所以答案必须足够简单,以便在 10-15 分钟内写在纸上。
android - 非root设备上的Android用户空间文件系统驱动程序?
我可以通过标准的可用实用程序编写一个可以在无根工厂设备上运行的自定义用户空间文件系统吗?
我知道fuse-android的存在,但是据我所知,它需要一个有根设备。如果不是这样,请纠正我。
我试图实现的目标是创建一个实际安装到文件的“假”FS。
emacs - 尝试通过 sshfs 保存文件时,emacs 会发出警告
我安装了一个 sshfs 文件系统
然后编辑此文件系统下的文件
当我保存文件时,我收到警告
其他编辑器没有这个问题。这是什么原因造成的?我该如何预防?两台主机都在运行ntp,时间相同。
TIA。
PS我知道我可以直接用tramp打开文件,但我更喜欢sshfs,假设我每次尝试保存文件时都可以摆脱这个警告。
android - 文件安全性 android:如何使文件只能由我的 android 应用程序读取
我的 android 设备的 sd 卡上有一组加密文件。我的应用程序使用 bufferedInputstream 读取加密文件,并在应用程序的内部存储中生成解密文件。然后应用程序读取解密文件(.pdf、.swf、.flv)以查看它。如何确保用户(包括 root 设备上的 root 用户)无法访问解密文件?
- 一旦我的应用程序打开它进行读取,我可以删除解密文件的读/写权限吗?如果是,请指导我如何?
- 我可以在我的应用程序打开文件后立即从内部存储中删除文件吗?如果是,请指导我如何?
- 我偶然发现了https://github.com/seth-hg/fuse-android。如果没有其他方法,在用户空间构建文件系统来处理这种情况是个好主意吗?如果您尝试过,请指出正确的方向或教程。
android - 无法使用 ndk-build 构建修改后的 android-fuse
使用 ndk-build 编译时,出现以下错误:
我修改了 fusexmp.c 如下:
c - 如何在保险丝中正确加线
我正在开发一个基于 FUSE 的文件系统项目。我想添加一些预先阅读的内容。所以我创建了一个线程来处理这样的任务,但似乎我让它比我想象的要慢。(即使我只是添加一个空闲线程,它也会让我的程序变得比没有它慢得多,但这并没有发生当我将此功能添加到我的服务器程序时,不使用保险丝)
我没有简单地使用 fuse_main 函数,而是阅读了 sshfs 的代码并尝试使用以下函数自己初始化它,
并且没有添加线程,它运行得很好,但是在我添加这个线程之后
它变慢了(读取一个 100M 的文件,没有这个线程它是 40 秒,而它接近 100 秒)
这与 schedparam 或其他有关吗?希望大家能给我一些建议,比如我需要检查什么。
再次感谢。
java - /usr/bin/ld: 在编译 jni 项目期间找不到 -ljvm:
我正在编译一个 jni 项目。这是我遇到的问题的详细信息:r
为了libjvm.so已经存在于/usr/lib中,我直接制作了一个conf文件,/etc/ld.so.conf.d/my.conf:
然后我使用命令 ldconfig。但不幸的是,我仍然遇到同样的问题。有什么想法吗?thx