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