如何打开临时文件并获取其文件名?

时间:2012-12-11 18:28:50

标签: c file posix temp

我需要在我的C程序中创建一个临时文件,向其中写入一些数据,然后调用外部命令(通过exec或system)对我刚创建的文件进行一些处理。我没有编写外部命令,也不可能将它集成到我的程序中,因此我认为我不能与它共享已打开的描述符。因此,我需要知道创建的临时文件的名称。

tempname()函数执行此操作,但不幸的是,由于获取名称和打开文件之间可能存在竞争条件,并且它推荐的函数都没有(tmpfile和mkstemp),因此它建议您不要使用它自己。提供一种方法来找出所创建文件的实际名称。

1 个答案:

答案 0 :(得分:5)

mkstemp并不能让你知道临时文件名,尝试编译并执行这个程序来看你自己:

#include <stdlib.h>
#include <stdio.h>

int main()
{   
    char fn[] = "/tmp/fileXXXXXX";
    int fd = mkstemp(fn);
    char cmd[200];
    int n = snprintf(cmd, sizeof(cmd), "ls -l %s\n", fn);

    printf("snprintf=>%d\n sizeof(fn)=%d\n", n, sizeof(fn)); // extra info, see comments

    printf("%s\n", cmd);
    return system(cmd);
} 

mkstemp将使用实际文件名替换传递给它的缓冲区中的文件名模板,稍后您可以使用此缓冲区执行任何操作。