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

Unintuitive behavior of open with flags DIRECTORY and O_CREAT

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

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

如果文件名未指定目录,

O_DIRECTORY 应该会失败。我在这里将 "a directory" 解释为 "an existing directory"。

您可以先使用 mkdir。如果目录已经存在,mkdir 将 return 一个错误代码。您只需忽略由 mkdir 编辑的值 return。然后用 O_DIRECTORY:

打开文件
mkdir(the_file_name, your_desired_mode);
f = open(the_file_name, O_DIRECTORY);