【发布时间】:2013-08-09 10:32:19
【问题描述】:
我们正在使用 Python Fuse Library 实现一个文件系统。我们为此文件系统实现了“快照”功能 (api)。我们现在想通过像 (ls,mkdir,etc) 这样的系统调用来调用这个快照 API - 快照?我们如何创建这个新的系统调用?
【问题讨论】:
标签: python filesystems system-calls fuse
我们正在使用 Python Fuse Library 实现一个文件系统。我们为此文件系统实现了“快照”功能 (api)。我们现在想通过像 (ls,mkdir,etc) 这样的系统调用来调用这个快照 API - 快照?我们如何创建这个新的系统调用?
【问题讨论】:
标签: python filesystems system-calls fuse
不幸的是,您不能只向 FUSE 添加系统调用,因为 FUSE 依赖内核来完成繁重的系统调用。您需要将其添加到内核中。
另一方面,您确定需要完整的系统调用,还是可以在用户级别实现您需要的功能? (例如,ls,即readdir() 实际上不是系统调用,它是一个用户级库例程,它调用其他一些系统调用,例如getdents()。)
如果您只需要对系统上运行的所有程序进行调用,请将其添加到标准库之一,或使用LD_PRELOAD 破解它。
要向内核添加系统调用,请参见此处: http://www.csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/projects/howto_add_systemcall.html
对于LD_PRELOAD 方法,请参见此处:
What is the LD_PRELOAD trick?
【讨论】:
IOCTL 是一种机制,旨在实现依赖于文件系统的自定义操作。 Btrfs implements 克隆文件,创建快照并通过 IOCTL 发送/接收。
【讨论】: