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

How to get the number of process sharing a file by using mmap?

本文关键字:进程 共享文件 获取 何使用 mmap      更新时间:2023-10-16

是否有办法获得映射到特定文件的进程数?

实际上,我想在所有进程都关闭时删除多个进程共享的文件。有什么办法吗?

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

首先需要创建一个fork的池。然后,您可以通过struct stat访问每个文件,无论是硬链接,符号链接等,请参阅man 2 stat

因为你想找出PIDs和你需要/proc的文件之间的关系,你需要:/proc/PID/stat

我认为下面的项目很容易完成你的工作:

http://brokestream.com/procstat.html

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

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

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