gpt4 book ai didi

c++ - 使用从 mkstemp 生成的文件名

转载 作者:太空狗 更新时间:2023-10-29 21:05:36 25 4
gpt4 key购买 nike

mkstemp() 函数从模板生成一个唯一的临时文件名,创建并打开文件,并返回文件的打开文件描述符。模板的最后六个字符必须是“XXXXXX”,这些字符将替换为使文件名唯一的字符串。由于会被修改,template不能是字符串常量,而应该声明为字符数组。

将模板替换为使文件名唯一的字符串后,我保存该字符串以备后用。这是我遇到一个奇怪的问题的地方,我似乎无法解决这个问题。我可以将正确的文件名打印到我的终端,在我的文件资源管理器中查看文件并打开它以查看正确的内容,但是当我将字符串作为命令的一部分包含在使用 popen() 执行时我得到一个指向空文件的指针。但是,当我将临时文件的名称硬编码回我的代码并再次运行时,我得到了我期望的正确结果。有什么我忽略或遗漏的吗?这是一个代码片段:

char tmpname[] = "tmp.XXXXXX";
FILE *fpt = fdopen(mkstemp(tmpname), "w");
string saved_tmpname(tmpname);
// blah
// write to file
// blah blah
const string command = "mycommand " + saved_tmpname;
cout << command << endl; // prints correctly
FILE *fpipe = popen(command.c_str(), "r");
if (fpipe == NULL) {
perror(command.c_str());
}
char buff[4096];
while (fgets(buff, 4096, fpipe)) {
// we don't get here!
}

最佳答案

来自 mkstemp 的联机帮助页:

文件使用 open(2) O_EXCL 标志打开,保证调用者是创建文件的进程。

O_EXCL 标志阻止您再次打开该文件。这没关系,因为它是一个临时文件——只有一个进程(创建者)应该可以访问它。临时文件有时包含敏感数据。

关于c++ - 使用从 mkstemp 生成的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com