Я думаю, что вам нужно расширить понятие «закрытие файла» за пределы fclose
или std::fstream::close
на то, что вы собираетесь делать. Это может быть так просто, как
class MyFile : public std::fstream {
std::string filename;
public:
MyFile(const std::string &fname) : std::fstream(fname), filename(fname) {}
~MyFile() { unlink(filename); }
}
или это может быть что-то более сложное. Насколько я знаю, это может быть даже намного проще - если вы закрываете файлы только в одном или двух местах в вашем коде, лучшее, что можно сделать, это просто unlink
файл там (или использовать boost :: filesystem :: удалить, как предполагает Том).
OTOH, если все, чего вы хотите добиться - это то, что процессы, запущенные из вашего процесса, могут использовать файл, вам, возможно, вообще не нужно хранить его на диске. fork
ed процессы наследуют открытые файлы. Не забудьте dup
их, чтобы поиск у ребенка не влиял на положение в родителе или наоборот.