打开文件时出现错误:使用O_CREAT选项,没有这样的文件或目录。

5
我将尝试使用open函数创建一个文件,调用方式如下:
dest_fd = open(fileLocation, O_RDWR | O_CREAT, 0666)

当我运行代码时,我得到了以下结果:
fileLocations: /tmp/folder/file.a
open: No such file or directory
<注意我打印了fileLocation的值,以确保它不是相对路径...> <我尝试了其他主题上找到的方法,但似乎没有起作用,可能出了什么问题?>
1个回答

7
当使用O_CREAT时,open返回的错误表示您要创建的文件所在的父目录或其任一父目录不存在。 open不会为您创建整个目录层次结构; 您必须按需要沿着路径向上调用mkdir
在这种情况下,我会做类似以下的操作:
if (mkdir("/tmp/chatty", 0777) && errno != EEXIST)
   perror_exit("mkdir /tmp/chatty");
dest_fd = open("/tmp/chatty/libchatty.a", O_RDWR|O_CREAT|O_EXCL, 0666);
/* ... */

而不要试图递归并尝试创建/tmp,如果mkdir也失败且出现了ENOENT,则不要打扰,因为您可能没有权限进行此操作,而且无论如何,如果/tmp不存在,则计算机可能出现了严重问题。


如果您需要一个函数来确保创建文件路径,请参阅如何在C++/Linux中创建目录树 - 该代码是C代码,也可以编译为C++而不是反过来。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接