【发布时间】:2017-12-15 19:33:03
【问题描述】:
我正在运行内核版本 4.8.0 和 glibc 版本 2.23 的 Ubuntu 16.04。当我使用标志O_DIRECTORY 和O_CREAT 执行open 并且该目录不存在时,会创建一个常规文件而不是目录。有哪些解决方法可以解决这种不直观的行为?
【问题讨论】:
标签: linux posix system-calls
我正在运行内核版本 4.8.0 和 glibc 版本 2.23 的 Ubuntu 16.04。当我使用标志O_DIRECTORY 和O_CREAT 执行open 并且该目录不存在时,会创建一个常规文件而不是目录。有哪些解决方法可以解决这种不直观的行为?
【问题讨论】:
标签: linux posix system-calls
当我正确理解 open 的联机帮助页时,O_DIRECTORY 和 O_CREAT 的组合不是有意的:
如果文件名没有指定目录,O_DIRECTORY 应该会失败。我在这里将“目录”解释为“现有目录”。
您可以先使用mkdir。如果目录已存在,mkdir 将返回错误代码。您只需忽略mkdir 返回的值。然后你用O_DIRECTORY打开文件:
mkdir(the_file_name, your_desired_mode);
f = open(the_file_name, O_DIRECTORY);
【讨论】:
open的实现有一个错误,因为它没有返回任何错误来表示错误的参数组合。