我需要在我的 C 程序中创建一个临时文件,向其中写入一些数据,然后调用一个外部命令(通过 exec 或 system)对我刚刚创建的文件进行一些处理。我没有编写外部命令,也无法将其集成到我的程序中,所以我认为我不能与它共享已经打开的描述符。因此,我需要知道创建的临时文件的名称。
tempname() 函数执行此操作,但不幸的是,由于获取名称和打开文件之间可能存在竞争条件,它建议您不要使用它自己,并且它推荐的函数(tmpfile 和 mkstemp)都没有提供方法找出创建的文件的实际名称。
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
将用实际文件名替换您传递给它的缓冲区中的文件名模板,您可以稍后使用此缓冲区做任何您想做的事情。