【问题标题】:Open: no such file or directory with O_CREAT打开:没有带有 O_CREAT 的文件或目录
【发布时间】:2018-02-03 00:55:09
【问题描述】:

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

dest_fd = open(fileLocation, O_RDWR | O_CREAT, 0666)

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

fileLocations: /tmp/folder/file.a
open: No such file or directory

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

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

【问题讨论】:

    标签: c file system-calls


    【解决方案1】:

    使用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);
    /* ... */
    

    如果mkdir 也以ENOENT 失败,则不必费心递归并尝试创建/tmp,因为您可能没有这样做的特权,无论如何如果/tmp不存在 计算机出现严重问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    相关资源
    最近更新 更多