我有一个测试,它在标准的cmake / ctest过程中运行。
问题是我的测试需要创建一个临时文件(不需要在不同的测试中保存它),并且它失败并显示EACCES
错误代码。
以下(大概)失败了:
m_hFile = open("/tmp/mytest.bin", O_RDWR | O_CREAT);
我是否必须调整与权限相关的内容,或者写入其他位置?
答案 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);