c - 当目录不存在时打开相对文件并显示 `open`

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

错误信息是:

[!!] 打开文件时 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/

相关文章:

c - 关于不正确的打包编译指示的警告

c - 如何在 C 中读取 .csv 文件

c - 文件到字符串数组(逐行)

c++ - 如何消除这个多余的元素?

c - 从 parent 向 child 发送信号

c - stdout 和 printf 的行为

objective-c - 稳定的类似恒温器的算法,其中输入变化可能很大且突然

file - 如何根据行值拆分CSV文件

linux - Linux异步IO的状态?

java - 任何方式只忽略 "connection reset by peer"IOExceptions