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

时间:2017-08-25 02:24:47

标签: c file system-calls

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

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

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

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

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

我试着做我在其他主题上发现的东西,但它似乎不起作用,它会出现什么问题?

1 个答案:

答案 0 :(得分:3)

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

如果/tmpmkdir失败,则不会再次尝试创建ENOENT,因为您可能没有权限这样做,无论如何,如果/tmp不存在,那么计算机就会出现严重问题。