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

时间:2017-07-11 16:06:57

标签: linux posix system-calls

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

1 个答案:

答案 0 :(得分:3)

当我正确理解open的联合帮助页时,O_DIRECTORYO_CREAT的组合并非意图:

如果文件名未指定目录,

O_DIRECTORY将失败。我解释"一个目录" as"现有目录"这里。

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

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