Хорошо, mkstemp
- предпочтительный способ создания временного файла в POSIX.Как создать std :: ofstream для временного файла?
Но он открывает файл и возвращает int
, который является файловым дескриптором. Из этого я могу создать только FILE *, но не std::ofstream
, который я бы предпочел в C++. (По-видимому, на AIX и некоторые другие системы, вы можете создать std::ofstream
из файлового дескриптора, но мой компилятор жалуется, когда я пытаюсь это.)
Я знаю, что я мог бы получить имя временного файла с tmpnam
, а затем открыть мои собственные ofstream с ним, но это, по-видимому небезопасным из-за условия гонки, и результаты предупреждения компилятора (г ++ v3.4 на Linux.):
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
Итак, есть ли какой-либо портативный способ создания std::ofstream
на темп файл?
Это не компилируется с моим g ++ v3.4.4 на Linux. По-видимому, только некоторые платформы имеют эту функцию. – Frank
Спасибо! Для вашего второго метода (с использованием mkstemp и thenstream): Это все еще эффективно с точки зрения ввода-вывода? Это будет доступ к файловой системе дважды, не так ли? Наша файловая система очень медленная, и я беспокоюсь, что она наложит на нее ненужную нагрузку. – Frank
strdup не переносится, либо ... – Sol