У меня есть динамическая библиотека Linux, которая должна создавать временные файлы.
Вы можете использовать atexit (3) , чтобы зарегистрировать обработчик, который будет удалять все эти временные файлы в exit (3) раз (или обычное завершение main
). Конечно, это не будет работать с сигналами.
Вы можете создать эти файлы в некоторой файловой системе tmpfs
. Тогда они будут удалены при выключении.
Если вы соблюдаете какое-то соглашение об именах этих файлов, вы также можете опубликовать свою библиотеку с помощью некоторого сценария очистки (запускаемого некоторой записью crontab
).
Есть ли вменяемый способ автоматического удаления файлов при уничтожении создавшего их процесса?
В общем, не (и не может быть с семантикой файлов POSIX). Вы можете написать программу очистки (возможно, используя inotify (7) средства) для запуска извне (например, как crontab
задание или как какой-то демон).
Вы также можете отсоединить (2) каждый такой временный файл после создания (с помощью open
или creat
) и сохранить для него дескриптор файла. Затем, когда процесс завершается или когда он close
-с этим дескриптором файла, файловый ресурс освобождается. Этот трюк используется tmpfile (3) .
Кстати, если вы используете LLVM в качестве JIT-транслятора, вы можете рассмотреть возможность использования libgccjit . Он способен генерировать код без какого-либо входного файла.
Такие временные файлы не могут быть удалены автоматически, потому что некоторые другие процессы могут открыть их (по их имени) - в любой момент. И именно поэтому в Linux не может быть «удаления при закрытии» (в отличие от этого, по слухам, Windows позволяет только одному процессу записать данный файл).
Но может быть какой-то способ пометить файлы, чтобы ОС их удалила.
Нет, не в Linux или POSIX. Эта функция должна быть предоставлена кодом приложения.