打开:没有 O_CREAT 这样的文件或目录
Open: no such file or directory with O_CREAT
我正在尝试使用 open 函数创建一个文件,并将其命名为
dest_fd = open(fileLocation, O_RDWR | O_CREAT, 0666)
当我 运行 我得到的代码:
fileLocations: /tmp/folder/file.a
open: No such file or directory
(请注意,我打印了 fileLocation 的值以确保它不是相对路径...)
我尝试按照我在其他主题上找到的方法进行操作,但它似乎不起作用,可能是哪里出了问题?
当使用 O_CREAT
时,来自 open
的这个错误意味着您尝试创建的文件的 parent 目录 ,或其 parent 之一,不存在。 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);
/* ... */
如果 mkdir
也因 ENOENT
失败,也不必费心递归并尝试创建 /tmp
,因为您可能没有这样做的特权,在任何情况下,如果 /tmp
不存在,则计算机出现严重错误。
我正在尝试使用 open 函数创建一个文件,并将其命名为
dest_fd = open(fileLocation, O_RDWR | O_CREAT, 0666)
当我 运行 我得到的代码:
fileLocations: /tmp/folder/file.a
open: No such file or directory
(请注意,我打印了 fileLocation 的值以确保它不是相对路径...)
我尝试按照我在其他主题上找到的方法进行操作,但它似乎不起作用,可能是哪里出了问题?
当使用 O_CREAT
时,来自 open
的这个错误意味着您尝试创建的文件的 parent 目录 ,或其 parent 之一,不存在。 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);
/* ... */
如果 mkdir
也因 ENOENT
失败,也不必费心递归并尝试创建 /tmp
,因为您可能没有这样做的特权,在任何情况下,如果 /tmp
不存在,则计算机出现严重错误。