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

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

案例1:两个文件句柄

# setup
exec 3>test.lck
exec 4>test.lck
# usage
flock -x 3  # this grabs an exclusive lock
flock -s 4  # this blocks
echo "This code is never reached"

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

# 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"

如果我在“设置”阶段完成之后和“使用”之前检查用户空间的系统状态,并且我想区分这两种情况,那么必要的元数据是否可用?如果没有,揭露它的最佳方法是什么? (将内核空间指针添加到/ proc / * / fdinfo是一个合理的操作,上游可能会接受作为补丁吗?)

最佳答案 我不知道有任何事情暴露在这个过程中.在调试一些垃圾时,弄清楚它可能很有用,但是你可以使用内核调试器或systemtap脚本来检查状态.

从您的问题看来,您似乎希望以一种易于编写脚本的方式实现这一目标,在这里我必须问一下真正的问题是什么.

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

点赞