2012-08-17 100 views
9

我见过一些与我的问题有关的帖子,但没有一篇完全解决它。我需要在标准临时目录中创建一个文件,并在完成写入后将其移至其他位置。这个想法是该文件在下载完成后被认为是暂时的,并且被永久保存。如何获取临时文件名?

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

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

回答

10

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

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

此调用后,您有fd有效的描述符和name相关文件的名称。

+0

你是对的,当我阅读文档时我需要更彻底。打电话给我强迫症,但我用[这篇文章](http://stackoverflow.com/questions/4790471/how-can-i-get-the-temporary-directory-path-in-ubuntu)的信息获取临时文件夹,而不是简单的硬编码“/ tmp”; – jorgander 2012-08-17 15:59:17

+0

如果要创建一个文件在/ tmp /然后你正打算将文件移动到特定的位置说:“/家/ /然后将需要很长时间才能CP或移动,这将是更坏,如果/ tmp和/家/是在不同的分区区域,所以更好地创造在/ home//fileXXXXX文件,并将其重命名为/ home/ /文件 – Viswesn 2012-08-17 17:56:51

+0

什么是最终的文件名 – 2015-09-20 17:13:05