如何获取临时文件名?

jor*_*der 15 c unix temporary-files temporary-directory

我看过一些与我的问题相关的帖子,但没有一个完全解决它.我需要在标准临时目录中创建一个文件,在我写完文件后,将其移动到其他位置.这个想法是文件在下载时被认为是临时的,在下载完成后是永久性的.

我是通过调用mkstemptmpfile来尝试这个,然后在我写完之后重命名.但是,我需要文件的完整路径来调用重命名,显然从文件描述符(由mkstemp返回)或FILE*(由tmpfile返回)获取文件名不是一个简单的过程.它可以做到,但它并不优雅.

是否有系统调用将创建临时文件并为我提供名称?我知道mktemp和相关的调用,但它们要么不保证是唯一的,要么被弃用.或者也许有更好的方法来完成创建,写入和移动临时文件.

cni*_*tar 16

它看起来mkstemp实际上是要走的路.

int fd;
char name[] = "/tmp/fileXXXXXX";
fd = mkstemp(name);
/* Check fd. */
Run Code Online (Sandbox Code Playgroud)

在此调用之后,您将拥有一个有效的描述符fd和相关文件的名称name.