linux - 使用标志 DIRECTORY 和 O_CREAT 打开的不直观行为

标签 linux posix system-calls

我正在运行 Ubuntu 16.04,内核版本为 4.8.0,glibc 版本为 2.23。当我使用标志 O_DIRECTORYO_CREAT 执行 open 并且目录不存在时,将创建一个常规文件而不是目录。有哪些解决方法可以解决这种不直观的行为?

最佳答案

当我正确理解 open 的联机帮助页时,O_DIRECTORYO_CREAT 的组合不是预期的:

如果文件名未指定目录,

O_DIRECTORY 应该会失败。我在这里将“目录”解释为“现有目录”。

您可以先使用 mkdir。如果目录已经存在,mkdir 将返回一个错误代码。您只需忽略 mkdir 返回的值。然后使用 O_DIRECTORY 打开文件:

mkdir(the_file_name, your_desired_mode);
f = open(the_file_name, O_DIRECTORY);

关于linux - 使用标志 DIRECTORY 和 O_CREAT 打开的不直观行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45039603/

相关文章:

android - 我如何使用 "strace"知道组件的系统调用

linux - shm_open 是否提交固定数量的物理内存?

c - 使用 POSIX 计数信号量作为二进制信号量

c - 哪些系统调用可以返回 EINTR 或 EAGAIN 错误代码?

c - 对 mprotect 的调用太多

c - 是僵尸吗?

linux - Zend Framework 2 中公用文件夹的最佳设置是什么?

Linux replace 从字符串中删除字符并保存到 var

linux - Fedora 20如何在启动结束时运行脚本

linux - 将命令的输出重定向到 linux 上的套接字