【发布时间】:2021-05-21 04:32:13
【问题描述】:
我正在使用libfuse 开发一个文件系统,并且需要找到一种方法来拦截对存储大小查询的调用,即du 和df。
但我无法确定如何做到这一点,也无法找到展示这一点的示例。
查看我的文件系统的调试输出,也没有提供太多信息,因为我不确定应该拦截哪个调用。
【问题讨论】:
-
文件系统驱动程序不直接参与运行命令。它用于访问包含程序的文件,但无法区分运行程序和出于其他目的读取它。
-
所以这是不可能的?
-
所以如果你试图在驱动中拦截它,你也会拦截
wc -c /usr/bin/du之类的东西 -
你不应该只实现程序内部使用的文件系统操作吗?例如。
stat()和statfs()? -
调用
strace du <fuse mount>和strace df <fuse mount>给了我一些stat和statfs调用,所以你应该在你的代码中拦截这些。不知道 df/statfs 但关于 du 没有办法破解它 - 该程序只是遍历文件并调用 stat.你只能为它准备一个快速缓存。