Я хочу создать временный файл с «хорошим» именем, например
my-app-Mar27-120357-Qf3K0a.html
следуя рекомендациям по безопасности.
POSIX предлагает мне mkstemp(3)
, который принимает шаблон имени файла (обычно что-то вроде /tmp/my-app-XXXXXX
), но у него есть две проблемы:
- Мне нужно выбрать выходной каталог самостоятельно. Когда я вижу glibc
tempnam(3)
(который устарел для из соображений безопасности) учитывает множество факторов, я хочу, чтобы библиотечная функция выбрала его. - В имени файла нет расширения
Ко второму элементу можно обратиться с помощью mkstemps(3)
, что требует некоторого количества символов для сохранения в качестве определяемого пользователем расширения. В моем случае я могу пройти my-app-Mar27-120357-XXXXXX.html
и 5
, но есть свои проблемы:
- Мне все еще нужно выбрать выходной каталог
- Это не совсем портативно. NetBSD, кажется, отсутствует.
Поэтому я рассматриваю возможность использования устаревшего tempnam(3)
для создания имени файла с выходным путем к каталогу, перезаписать часть имени файла с помощью X
и передать его в mkstemp(3)
, а затем переименовать файл в моем предпочтительном формате. Таким образом, проблема заключается в последнем шаге, переименовании без перезаписи; возможно ли это в POSIX?
Или может быть есть лучшие альтернативы?
tmpnam
< /a> вы можете использовать, если вам действительно нужно имя. - person Some programmer dude   schedule 27.03.2016tmpnam(3)
менее гибкий, чемtempnam(3)
, о котором я уже упоминал в своем посте. - person nodakai   schedule 27.03.2016mkstemps
. Однако в настоящее время его нет в Minix3 libc. - person kdhp   schedule 27.03.2016