从测试中创建临时文件的位置

时间:2018-04-15 22:15:51

标签: c linux ctest

我有一个测试,它在标准的cmake / ctest过程中运行。

问题是我的测试需要创建一个临时文件(不需要在不同的测试中保存它),并且它失败并显示EACCES错误代码。

以下(大概)失败了:

m_hFile = open("/tmp/mytest.bin", O_RDWR | O_CREAT);

我是否必须调整与权限相关的内容,或者写入其他位置?

2 个答案:

答案 0 :(得分:3)

您可以使用ISO C函数tmpfile创建具有自动生成的文件名的临时文件。该文件以"wb+"模式打开。

实现应该自己选择一个目录,在那里可以创建临时文件;在POSIX文档中,它指定只有在打开文件句柄太多或磁盘空间不足时才会失败。 (即不允许出现许可错误。)

此外,您可以使用tmpnam函数生成唯一的文件名(这不是线程安全的),然后您可以尝试为其创建文件。

答案 1 :(得分:1)

谢谢大家,我发现了问题。

如果文件不存在并且应该被创建,则结果是 - 似乎我必须指定mode,并使用open的3参数版本。< / p>

m_hFile = open("/tmp/mytest.bin", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP);