Использование имени файла, сгенерированного из mkstemp ⇐ C++
-
Anonymous
Использование имени файла, сгенерированного из mkstemp
Функция mkstemp() генерирует уникальное временное имя файла из шаблона, создает и открывает файл и возвращает дескриптор открытого файла для файла. Последние шесть символов шаблона должны быть «XXXXXX», и они заменяются строкой, которая делает имя файла уникальным. Поскольку шаблон будет изменен, он не должен быть строковой константой, а должен быть объявлен как массив символов.
После того, как шаблон заменяется строкой, которая делает имя файла уникальным, я сохраняю строку для дальнейшего использования. Здесь я столкнулся со странной проблемой, которую не могу понять. Я могу напечатать правильное имя файла на своем терминале, просмотреть файл в проводнике и открыть его, чтобы увидеть правильное содержимое, но когда я включаю строку как часть команды для выполнения с помощью popen() Я получаю указатель на пустой файл. Однако когда я жестко кодирую имена временных файлов обратно в свой код и запускаю снова, я получаю правильный результат, который ожидал. Есть ли что-то, что я упускаю из виду или упускаю? Вот фрагмент кода:
char tmpname[] = "tmp.XXXXXX"; ФАЙЛ *fpt = fdopen(mkstemp(tmpname), "w"); строка save_tmpname(tmpname); // бла // запись в файл // бла-бла команда const string = «mycommand» + save_tmpname; cout
Функция mkstemp() генерирует уникальное временное имя файла из шаблона, создает и открывает файл и возвращает дескриптор открытого файла для файла. Последние шесть символов шаблона должны быть «XXXXXX», и они заменяются строкой, которая делает имя файла уникальным. Поскольку шаблон будет изменен, он не должен быть строковой константой, а должен быть объявлен как массив символов.
После того, как шаблон заменяется строкой, которая делает имя файла уникальным, я сохраняю строку для дальнейшего использования. Здесь я столкнулся со странной проблемой, которую не могу понять. Я могу напечатать правильное имя файла на своем терминале, просмотреть файл в проводнике и открыть его, чтобы увидеть правильное содержимое, но когда я включаю строку как часть команды для выполнения с помощью popen() Я получаю указатель на пустой файл. Однако когда я жестко кодирую имена временных файлов обратно в свой код и запускаю снова, я получаю правильный результат, который ожидал. Есть ли что-то, что я упускаю из виду или упускаю? Вот фрагмент кода:
char tmpname[] = "tmp.XXXXXX"; ФАЙЛ *fpt = fdopen(mkstemp(tmpname), "w"); строка save_tmpname(tmpname); // бла // запись в файл // бла-бла команда const string = «mycommand» + save_tmpname; cout
Мобильная версия