- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我发现 FUSE 用户空间库和内核接口(interface)自从它在 Linux 上诞生以来就已经被移植到许多其他系统,并提供了一个相对稳定的 API,据说表面面积很小。如果我想在用户空间中编写文件系统,并且我不在 Plan 9 或 Hurd 上,我会认为 FUSE 是我的最佳选择。
但是,我不会使用 libfuse。这部分是因为实用主义。在我选择的语言 (Monte) 中使用 C 很难。也是因为我对编写 C 支持代码完全不感兴趣,而且 libfuse 的推荐用法与 Monte 哲学不兼容。这应该不是问题,因为 C 并不神奇,并且/dev/fuse 可以通过标准系统调用打开。
要查找文档,但是,我找不到任何文档。我找不到关于/dev/fuse ABI/API 的文档,也没有其他人采用相同的非 C 绑定(bind)路线的故事。令人沮丧。
是否存在关于如何以与语言无关的方式与/dev/fuse 和内核的 FUSE 子系统进行交互的任何类型的文档?如果是这样,你能指出我吗?谢谢!
更新:存在 go-fuse ,这是在 Go 中,一种比 C 更易读的语言。但是,它也不包含任何 ABI/API 文档。
更新:我注意到人们投票决定关闭它。别担心,没有那个必要。我对自己想要的文档尚不存在感到满意。我将自己编写文档,发布它,然后在接受的答案中链接到它。希望下一个搜索此文档的人不会失望。
最佳答案
(在完成之前我不会接受它。在此期间,欢迎进行编辑!)
FUSE session 的基本大纲:
open()
在 /dev/fuse
上调用。我将生成的 FD 称为控制 FD。mount()
使用目标挂载点、普通模式的文件系统类型“fuse”或 block 设备模式的“fuseblk”以及包括“fd=X”在内的选项进行调用,其中 X 是控制 FD。read()
来自控制 FD 的文件系统命令,然后 write()
返回响应。<umount()
使用目标挂载点调用。close()
在控件 FD 上调用。综上所述,人们应该注意一些并发症。首先,mount()
几乎总是特权系统调用,因此您必须是 root 才能挂载 FUSE 文件系统。但是,正如您可能已经注意到的那样,FUSE 程序通常可以以非根用户身份启动!怎么办?
有一个助手,/bin/fusermount
,安装了 setuid。用法完全没有记录,但这就是我来这里的目的。代替 open()
ing /dev/fuse
自己,运行 fusermount
作为子进程,将目标挂载点作为参数传递,任何额外的使用 -o
安装您喜欢的选项,并且(至关重要的)使用环境变量 _FUSE_COMMFD
导出并设置为打开的 FD 的 ASCII 字符串,我将其称为 < strong>comm FD。您必须使用例如自己创建 comm FD 管道()
。 fusermount
将为您调用open()
和mount()
,并通过comm FD 将控制FD 共享给您,使用sendmsg()
共享 FD 的技巧。使用 recvmsg()
读回。
社论:我真的不明白为什么这个结构如此困难。 FD被子进程继承;在顶层进程中open()
控制FD 并将其传递到fusermount
会容易得多。的确,有一些令人困惑的副危险,但是 fusermount
已经安装并且 setuid 和 dangerous。
无论如何! fusermount
将粗暴地守护进程并负责调用 umount()
和 close()
以在主进程退出后进行清理。
尚未涵盖的内容:
关于linux - 如何在不使用 libfuse 的情况下使用 FUSE 创建用户空间文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31601272/
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我无法使用 Elixir 连接到 Postgres: ** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P
这个问题已经有答案了: Group by field name in Java (7 个回答) 已关闭 7 年前。 我必须编写一个需要 List 的方法并返回 Map> . User包含 Person
感谢您的帮助,首先我将显示代码: $dotaz = "Select * from customers JOIN contracts where customers.user_id ='".$_SESS
我只想向所有用户中的一个用户显示一个按钮。我尝试了 orderByKey() 但没有成功! 用户模型有 id 成员,我尝试使用 orderByChild("id") 但结果相同! 我什至尝试了以下技巧
我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。 在这一步,我正在考虑安全性并尽可能锁定。因此,我希望设置一个 replication 用户(角色)并让 BDR
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我可以使用 Sonata User Bundle 将 FOS 包集成到 sonata Admin 包中。我的登录功能正常。现在我想添加 FOSUserBundle 中的更改密码等功能到 sonata
在 LinkedIn 中创建新应用程序时,我得到 4 个单独的代码: API key 秘钥 OAuth 用户 token OAuth 用户密码 我在 OAuth 流程中使用前两个。 的目的是什么?最后
所以..我几乎解决了所有问题。但现在我要处理另一个问题。我使用了这个连接字符串: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
我有一组“用户”和一组“订单”。我想列出每个 user_id 的所有 order_id。 var users = { 0: { user_id: 111, us
我已经为我的Django应用创建了一个用户模型 class User(Model): """ The Authentication model. This contains the u
我被这个问题困住了,找不到解决方案。寻找一些方向。我正在用 laravel 开发一个新的项目,目前正致力于用户认证。我正在使用 Laravels 5.8 身份验证模块。 对密码恢复 View 做了一些
安装后我正在使用ansible配置几台计算机。 为此,我在机器上本地运行 ansible。安装中的“主要”用户通常具有不同的名称。我想将该用户用于诸如 become_user 之类的变量. “主要”用
我正在尝试制作一个运行 syncdb 的批处理文件来创建一个数据库文件,然后使用用户名“admin”和密码“admin”创建一个 super 用户。 到目前为止我的代码: python manage.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我已在 Azure 数据库服务器上设置异地复制。 服务器上运行的数据库之一具有我通过 SSMS 创建的登录名和用户: https://learn.microsoft.com/en-us/azure/s
我有一个 ionic 2 应用程序,正在使用 native FB Login 来检索名称/图片并将其保存到 NativeStorage。流程是我打开WelcomePage、登录并保存数据。从那里,na
这是我的用户身份验证方法: def user_login(request): if request.method == 'POST': username = request.P
我试图获取来自特定用户的所有推文,但是当我迭代在模板中抛出推文时,我得到“User”对象不可迭代 观看次数 tweets = User.objects.get(username__iexact='us
我是一名优秀的程序员,十分优秀!