17

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

我正在尝试通过调用mkstemptmpfile来尝试此操作,然后在完成写入后重命名。但是,我需要文件的完整路径来调用重命名,显然从文件描述符(由 mkstemp 返回)或 FILE *(由 tmpfile 返回)获取文件名并非易事。可以做到,但并不优雅。

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

4

1 回答 1

18

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

int fd;
char name[] = "/tmp/fileXXXXXX";
fd = mkstemp(name);
/* Check fd. */

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

于 2012-08-17T15:07:13.613 回答