【问题标题】:Unintuitive behavior of open with flags DIRECTORY and O_CREAT使用标志 DIRECTORY 和 O_CREAT 打开的不直观行为
【发布时间】:2017-12-15 19:33:03
【问题描述】:

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

【问题讨论】:

    标签: linux posix system-calls


    【解决方案1】:

    当我正确理解 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);
    

    【讨论】:

    • 所以open的实现有一个错误,因为它没有返回任何错误来表示错误的参数组合。
    猜你喜欢
    • 2013-03-25
    • 2011-03-25
    • 2010-10-09
    • 1970-01-01
    • 2019-11-12
    • 2011-04-02
    • 1970-01-01
    • 2018-02-03
    • 2012-10-19
    相关资源
    最近更新 更多