Есть ли способ записи-открытия файлов в Linux в приложении C/C++ таким образом, чтобы, если приложение было убито, открытые файлы были удалены?
Приложение может быть убито SIGKILL, поэтому я не могу использовать обработчик сигналов.
Есть ли способ записи-открытия файлов в Linux в приложении C/C++ таким образом, чтобы, если приложение было убито, открытые файлы были удалены?
Приложение может быть убито SIGKILL, поэтому я не могу использовать обработчик сигналов.
Типичный прием для временных файлов — открыть/создать файл, а затем разъединить его, не закрывая файловый дескриптор.
Вы получаете файловый дескриптор файла, которого больше не существует. Вы по-прежнему можете читать из него и писать в него, но как только вы закроете файловый дескриптор (или будете уничтожены), файл будет удален, а занимаемое им место освободится.
Конечно, это не сработает, если вы решите сохранить файл впоследствии.
link("/proc/self/fd/n", "permanent-name");
, если нужно сохранить файл?
- person Ben Voigt; 26.01.2014
proc/./fd
- это особые случаи, это символические ссылки, которые не ломаются при удалении цели. Но link
недостаточно умен, чтобы повторно связать цель. Может быть, есть какая-то другая функция, которая есть?
- person Ben Voigt; 26.01.2014
linkat
с флагом AT_FDCWD
и AT_EMPTY_PATH
. См. также comments.gmane.org/gmane.linux.file-systems/76553< /а>
- person Ben Voigt; 26.01.2014
close()
, тогда переименуйте файл. То, как вы избавитесь от временных файлов, если процесс будет убит, зависит от того, насколько срочно вы хотите это сделать: регулярная очистка cron, родительский процесс, который замечает, что подпроцесс мертв, и очищает его после этого. - person Harald   schedule 26.01.2014