Как создать временный файл в произвольной директории
От: RSNT  
Дата: 21.11.04 18:37
Оценка:
Приветствую,
подскажите как создать в Unix временный файл который сам удалиться полсе того на него закроеться последний указатель.
То есть нужен аналог аналог fopen(filename,"w+bD"); где D означает "Specifies a file as temporary. It is deleted when the last file pointer is closed". Функция tmpfile() не подходит потому что она создает файл в каталоге tmp а надо в заданном.
То есть скорее проблема в том как открыть файл чтобы сам удалился, имя я уже сгенерировал. Вручную удалить не получиться, нужно чтобы он именно системой удалился.
Re: Как создать временный файл в произвольной директории
От: fAX Израиль  
Дата: 21.11.04 18:43
Оценка: 13 (2)
Здравствуйте, RSNT, Вы писали:

RSN>Приветствую,

RSN>подскажите как создать в Unix временный файл который сам удалиться полсе того на него закроеться последний указатель.
RSN>То есть нужен аналог аналог fopen(filename,"w+bD"); где D означает "Specifies a file as temporary. It is deleted when the last file pointer is closed". Функция tmpfile() не подходит потому что она создает файл в каталоге tmp а надо в заданном.
RSN>То есть скорее проблема в том как открыть файл чтобы сам удалился, имя я уже сгенерировал. Вручную удалить не получиться, нужно чтобы он именно системой удалился.
Я не знаю, насколько подходит такой вариант, но если создать файл, открыть его, а потом удалить, то читать-писать в/из него можно будет (через дескриптор), а при закрытии файла он удалится системой. Т.е. файл будет существовать, пока не закроется последний такой дескриптор.
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re: Как создать временный файл в произвольной директории
От: jekjek Россия  
Дата: 24.11.04 05:05
Оценка:
Здравствуйте, RSNT, Вы писали:

RSN>Приветствую,

RSN>подскажите как создать в Unix временный файл который сам удалиться полсе того на него закроеться последний указатель.
RSN>То есть нужен аналог аналог fopen(filename,"w+bD"); где D означает "Specifies a file as temporary. It is deleted when the last file pointer is closed". Функция tmpfile() не подходит потому что она создает файл в каталоге tmp а надо в заданном.
RSN>То есть скорее проблема в том как открыть файл чтобы сам удалился, имя я уже сгенерировал. Вручную удалить не получиться, нужно чтобы он именно системой удалился.

А почему бы не подменить функцию close/fclose? Можно просто использовать свою, и в ней проверять переданный ей дескриптор на совпадение с заданным в каком-нибудь глобале. Если это оно и счетчик зануляется — удаляем файл. Если очень нужно использовать именно close/fclose, например, если она уже используется в третьесторонней библиотеке, тогда можно попробовать сделать свои close & fclose в отдельной shared library и загружать ее via LD_PRELOAD, что ли...

Ы?
Re: Как создать временный файл в произвольной директории
От: Murr Россия  
Дата: 26.11.04 15:38
Оценка:
Здравствуйте, RSNT, Вы писали:

RSN>Приветствую,

RSN>подскажите как создать в Unix временный файл который сам удалиться полсе того на него закроеться последний указатель.
RSN>То есть нужен аналог аналог fopen(filename,"w+bD"); где D означает "Specifies a file as temporary. It is deleted when the last file pointer is closed". Функция tmpfile() не подходит потому что она создает файл в каталоге tmp а надо в заданном.
RSN>То есть скорее проблема в том как открыть файл чтобы сам удалился, имя я уже сгенерировал. Вручную удалить не получиться, нужно чтобы он именно системой удалился.

Берите исходники tmpfile (например, в glibc) и измените там префикс /tmp на свой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.