我正在遵循黑客:利用的艺术中的示例代码,并且在运行以下代码时遇到问题。
datafile = (char *) ec_malloc(20);
strcpy(datafile, "/tmp/notes");
fd = open(datafile, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR);
if (fd == -1)
fatal("in main() while opening file");
错误信息是:
[!!] 打开文件时 main() 发生 fatal error :没有这样的文件或目录
“没有这样的文件或目录”之前的位是使用自定义 fatal()
函数创建的。
请注意,/tmp/notes
不存在于程序位置,但 O_CREAT
标志应该可以解释这一点(或者我是这么认为的)。我尝试将 strcpy
段切换为 ".\\tmp\\notes"
但结果是相同的。如何创建调用程序的目录中尚不存在的目录?
我在 Windows 10 上使用 MinGW,并使用 gcc
进行编译。
最佳答案
您说“程序所在位置”不存在/tmp/notes
。这意味着您正在目录 FOO 中运行程序,并期望它创建类似 FOO/tmp/notes 的文件。但你实际要求的是/tmp/notes,这是一个绝对路径。您可能想要不带前导斜杠的 tmp/notes,但这也是一个目录加一个文件,并且 open()
不会创建该目录。因此,要么使用 notes
作为在当前目录中打开的文件,要么使用 tmp/notes
并首先调用 mkdir("tmp")
.
关于c - 当目录不存在时打开相对文件并显示 `open`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40814286/