我们正在使用Python Fuse Library实现一个Filesystem。我们为此文件系统实现了“快照”功能(api)。我们现在想通过像(ls,mkdir等)这样的系统调用来调用这个快照api - 快照?我们如何创建这个新的系统调用?
答案 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发送/接收。