当链接计数为2时,有没有办法完全删除inode?

时间:2011-04-12 09:01:00

标签: c++ unix cache-control unlink hardlink

目前,我的数据被组织在一个具有缓存目录的卷中(首先创建或传输所有文件)。之后,卷上有合适的目录,它们的子目录中包含硬链接到缓存中文件的文件。 这样做是为了在多个目录中多次硬链接相同的inode(文件)。

现在,在尝试清理卷时,我反复地浏览目录(而不是缓存)并根据某些标准取消链接文件(这基本上将缓存条目的inode计数减少了1)。当我删除最后一个硬链接(即将计数从2减少到1)时,我有没有办法直接删除缓存条目。这样我就不必手动解析整个缓存目录来清除它的任何inode,其链接数只有1。

我已经完成了取消链接/删除功能,但找不到任何具体的使用方法。是否有一些清除算法在内部处理这个问题,然后我可以尝试实现它。

对此的任何帮助都将受到高度赞赏。期待迅速回复。

2 个答案:

答案 0 :(得分:2)

我看到了this以及其他一些指示您如何从shell中删除所有硬链接的地方(使用find -samefile并在每个文件上调用remove)。你可以通过系统调用它,虽然这可能会让一些人不满意。)

答案 1 :(得分:1)

不,没有任何东西可以满足您的需求。

在取消链接硬链接并注意到链接计数为1时执行删除可能很有用,因为此时inode应该在页面缓存中;这当然取决于知道缓存目录中文件的名称。

相关问题