打开:没有 O_CREAT 这样的文件或目录

Err*_*att 4 c file system-calls

我正在尝试使用 open 函数创建一个文件,将其称为

dest_fd = open(fileLocation, O_RDWR | O_CREAT, 0666)
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我得到:

fileLocations: /tmp/folder/file.a
open: No such file or directory
Run Code Online (Sandbox Code Playgroud)

(请注意,我打印了 fileLocation 的值以确保它不是相对路径...)

我试图做我在其他主题上找到的东西,但它似乎不起作用,它可能出了什么问题?

zwo*_*wol 5

使用 时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);
/* ... */
Run Code Online (Sandbox Code Playgroud)

/tmp如果mkdir失败了ENOENT,也不必费心递归并尝试创建,因为您可能没有这样做的权限,而且无论如何,如果/tmp不存在,计算机就会出现可怕的错误。