我正在尝试使用open函数创建一个文件,将其称为
dest_fd = open(fileLocation, O_RDWR | O_CREAT, 0666)
当我运行代码时,我得到:
fileLocations: /tmp/chatty/libchatty.a
open: No such file or directory
(注意我打印了fileLocation的值以确保它不是相对路径......)
我试着做我在其他主题上发现的东西,但它似乎不起作用,它会出现什么问题?
答案 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);
/* ... */
如果/tmp
与mkdir
失败,则不会再次尝试创建ENOENT
,因为您可能没有权限这样做,无论如何,如果/tmp
不存在,那么计算机就会出现严重问题。