Как узнать количество процессов, разделяющих файл, используя mmap?

Есть ли способ получить количество процессов, которые сопоставлены с конкретным файлом?

На самом деле, я хочу удалить файл, который используется несколькими процессами, когда все процессы не работают. Есть ли способ сделать это?

Я пробовал с fstat вызов функции, чтобы получить количество hard links но так как после сопоставления я закрываю файл так stat.st_nlink всегда 0,

1

Решение

Сначала вам нужно создать пул из ваших fork, Затем вы можете получить доступ к каждому файлу, либо через жесткую ссылку, символьную ссылку и т. Д. Через struct stat пожалуйста man 2 stat,

Потому что вы хотите выяснить, относительный между PIDs и файлы, которые вам нужны /proc вам нужно : /proc/PID/stat

Я думаю, что следующий проект облегчит вашу работу:

http://brokestream.com/procstat.html

После сохранения всех файлов вашего процесса в std::tuple, вы можете остановить ваш процесс, а затем удалить свои файлы.

1

Другие решения

Предполагая, что полный путь к файлу mmap () — / dir1 / dir2 / my_file, вы можете создать демон, который выполняет lsof /dir1/dir2/my_file в цикле, пока не обнаружит, что ни один процесс не имеет my_file открыт.

Предполагая, что приложения ваши, и вы можете изменить код, я бы посоветовал другой подход. Имейте одно приложение, которое запускается раньше других (может даже порождать другие процессы), и пусть это приложение создает и удаляет файл.

1

По вопросам рекламы [email protected]