如何使用mmap获取共享文件的进程数
How to get the number of process sharing a file by using mmap?
是否有办法获得映射到特定文件的进程数?
实际上,我想在所有进程都关闭时删除多个进程共享的文件。有什么办法吗?
我尝试使用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
为止。
假设应用程序是您的,并且您可以更改代码,我建议使用另一种方法。让一个应用程序在其他应用程序之前启动(甚至可以产生其他进程),并让该应用程序创建和删除文件。
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 如何:监视Windows中另一个进程的文件访问?
- 在共享文件夹上恢复有效权利的问题
- C 11中线程之间的共享文件记录
- 在线程之间共享文件描述符
- ReadFile winapi在从虚拟盒共享文件夹读取时失败.GetLastError正在引发错误183
- 如何将记忆映射的文件与另一个进程写入文件同步
- 在Linux中,多个进程使用文件指针读取文件时使用的共享虚拟内存
- 动态链接库 (.dll) 中的对象是否跨进程共享
- 执行一个新的完全独立的进程,该进程封装在一个可执行文件中,而不需要为独立进程将文件写入磁盘
- SYSTEM进程是否可以与非SYSTEM进程共享数据
- 在写入远程Windows共享文件夹的所有者时,GetNamedSecurityInfo返回ERROR_ACCESS_DE
- 以编程方式在非 Windows 计算机中创建共享文件夹
- 在 DLL 中打开共享文件
- POSIX 跨进程共享内存同步 C++/C++11
- 在VirtualBox的共享文件夹中构建符号链接共享库
- 可以跨进程共享的C++容器
- 如何获取进程的文件句柄
- 两个进程共享同一个pcap文件
- 如何使用mmap获取共享文件的进程数