如何使用mmap获取共享文件的进程数?

时间:2014-03-21 07:26:56

标签: c++ mmap fstat

有没有办法获得那些映射到特定文件的进程数?

实际上,我希望在所有进程都关闭时删除多个进程共享的文件。有没有办法做到这一点?

我尝试使用fstat函数调用来获取hard links的数量,但是在映射之后我关闭了文件,因此stat.st_nlink始终是0

2 个答案:

答案 0 :(得分:1)

首先,您需要创建fork的资源池。然后,您可以通过struct stat访问每个文件hardlink,symb-link等,请参阅man 2 stat

因为您想要找出PIDs/proc所需文件之间的相对关系,您需要:/proc/PID/stat

我认为以下项目可以轻松完成工作:

http://brokestream.com/procstat.html

std::tuple保存流程的所有文件后,您可以关闭流程,然后删除文件。

答案 1 :(得分:1)

假设mmap() - ed文件的完整路径是/ dir1 / dir2 / my_file,您可以创建一个守护进程,它在循环中执行lsof /dir1/dir2/my_file,直到它发现没有进程{{1开了。

假设应用程序是您的,并且您可以更改代码,我会建议另一种方法。让一个应用程序在其他应用程序之前启动(甚至可以生成其他进程),并让此应用程序创建并删除该文件。