为FUSE文件系统创建一个新的文件系统调用

时间:2013-08-07 20:58:29

标签: python filesystems system-calls fuse


我们正在使用Python Fuse Library实现一个Filesystem。我们为此文件系统实现了“快照”功能(api)。我们现在想通过像(ls,mkdir等)这样的系统调用来调用这个快照api - 快照?我们如何创建这个新的系统调用?

2 个答案:

答案 0 :(得分:1)

不幸的是,您不能只是向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?

答案 1 :(得分:1)

IOCTL是用于实现依赖于文件系统的自定义操作的机制。 Btrfs implements克隆文件,创建快照并通过IOCTL发送/接收。