使用标志 DIRECTORY 和 O_CREAT 打开的不直观行为
Unintuitive behavior of open with flags DIRECTORY and O_CREAT
我是 运行 Ubuntu 16.04,内核版本 4.8.0 和 glibc 版本 2.23。当我使用标志 O_DIRECTORY
和 O_CREAT
执行 open
并且目录不存在时,将创建一个常规文件而不是目录。有哪些解决方法可以解决这种不直观的行为?
当我正确理解 open
的联机帮助页时,O_DIRECTORY
和 O_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);
我是 运行 Ubuntu 16.04,内核版本 4.8.0 和 glibc 版本 2.23。当我使用标志 O_DIRECTORY
和 O_CREAT
执行 open
并且目录不存在时,将创建一个常规文件而不是目录。有哪些解决方法可以解决这种不直观的行为?
当我正确理解 open
的联机帮助页时,O_DIRECTORY
和 O_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);