2014-01-26 5 views
3

Есть ли способ открывать файлы в Linux в приложении C/C++ таким образом, что если приложение будет убито, открытые файлы будут отброшены?Отказывать открытые файлы, когда процесс убит

Приложение может быть убито SIGKILL, поэтому я не могу использовать обработчик сигналов.

+0

Сбрасываемый означает, что вы удалены (удалены) из файловой системы? – Harald

+0

Вероятно, возможно, в самом процессе. Важно ли, чтобы файлы при написании уже имели правильное имя. Если нет, вы можете написать их с временным именем. Если процесс сохранится до 'close()', тогда переименуйте файл. Как вы избавитесь от временных файлов, если процесс будет убит, это вопрос того, насколько срочно вы хотите это сделать: регулярная очистка cron, родительский процесс, который замечает, что подпроцесс мертв и очищается после него. – Harald

ответ

1

Типичный трюк для временных файлов - открыть/создать файл, а затем отсоединить его, не закрывая дескриптор файла.

В конце вы получите файловый дескриптор файла, который больше не существует. Вы можете читать и писать, но как только вы закроете дескриптор файла (или будете убиты), файл будет удален, а занимаемое им пространство будет освобождено.

Конечно, это не работает, если вы решите сохранить файл после этого.

+0

Нельзя использовать 'link ("/proc/self/fd/n "," constant-name ");' если вы хотите сохранить файл? –

+0

@BenVoigt Обычно эта ссылка будет (незаконно) пересекать границы файловой системы. Это особый случай? –

+0

@ Джонас: После дальнейших исследований, по-видимому, нет. 'proc /./ fd' - это особые случаи, они являются символическими ссылками, которые не прерываются при удалении цели. Но «link» недостаточно умен, чтобы перенаправить цель. Возможно, есть и другая функция? –

Смежные вопросы