linux:通过procfs确定文件句柄标识

时间:2016-02-20 17:23:22

标签: linux kernel flock procfs

我试图确定是否可以使用来自procfs的元数据来区分同一文件上的两个单独句柄,以及一个指向它的两个文件描述符的句柄。

案例1:两个文件句柄

# setup
exec 3>test.lck
exec 4>&3
# usage
flock -x 3  # this grabs an exclusive lock
flock -s 4  # this converts that lock to a shared lock
echo "This code gets run"

案例2:一个手柄,两个FD

/proc/*/fdinfo

如果我在&#34;设置&#34;之后检查系统的用户状态。阶段已经完成,在使用&#34;之前,我想区分这两种情况,是否有必要的元数据可用?如果没有,那么揭露它的最佳方式是什么? (向#include <iostream> using namespace std; string f() { string orig = "Baz"; string copy1 = string(orig); string copy2(orig); string copy3 = orig; cout << "orig addr: " << &orig << endl; cout << "copy1 addr: " << &copy1 << endl; cout << "copy2 addr: " << &copy2 << endl; cout << "copy3 addr: " << &copy3 << endl; return orig; } int main() { string ret = f(); cout << "ret addr: " << &ret << endl; } 添加内核空间指针是否是一个合理的操作,上游可能会接受它作为补丁?)

1 个答案:

答案 0 :(得分:1)

我没有意识到在proc中暴露这种情况的任何事情都是如此。在调试一些垃圾时,弄清楚它可能很有用,但是你可以用内核调试器或systemtap脚本检查状态。

从您的问题来看,您似乎希望以一种易于编写脚本的方式实现这一目标,在此我不得不问问题是什么。

我不知道linux那些人是否有兴趣公开这个。一个问题是暴露指向文件的指针会增加另一个infoleak,因此将来很可能插入。其他方法需要对所有文件对象进行编号,并且不会发生这种情况。无论如何,你会被要求以与我上面提到的相似的方式进行辩解。

相关问题