当目录不存在时,相对文件以`open`打开

时间:2016-11-26 02:09:42

标签: c file io mingw

我正在关注黑客攻击:剥削艺术中的示例代码,并在运行以下内容时遇到问题。

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");

错误消息是:

[!!] Fatal Error in main() while opening file: No such file or directory

使用自定义fatal()功能创建“无此文件或目录”之前的位。

请注意,/tmp/notes在程序的位置不存在,但O_CREAT标志应该考虑到这一点(或者我认为)。我已尝试将strcpy段切换为".\\tmp\\notes",但结果相同。如何创建在调用程序的目录中尚不存在的目录?

我在Windows 10上使用MinGW并且正在编译w / gcc

1 个答案:

答案 0 :(得分:1)

你在程序的位置说“{1}}不存在”。这意味着您正在目录FOO中运行该程序,并期望它创建一个像FOO / tmp / notes这样的文件。但你实际要求的是/ tmp / notes,这是一个绝对的路径。你可能想要没有前导斜杠的tmp / notes,但这也是一个目录和一个文件,/tmp/notes不会创建目录。因此,只需使用open()作为要在当前目录中打开的文件,或使用notes并首先调用tmp/notes