尽管仔细阅读了相关的标准文档,但在open
使用包含标志的系统调用调用系统调用时,我无法理解POSIX兼容系统中的预期行为O_CREAT|O_DIRECTORY
.
该标准规定了
如果设置了O_CREAT和O_DIRECTORY 且请求的访问模式既不是O_WRONLY也不是O_RDWR,则结果未指定.
但是它没有指定既没有系统的行为(O_CREAT|O_DIRECTORY|O_WRONLY)
,也没有(O_CREAT|O_DIRECTORY|O_RDWR)
.确实(据我所知),行为EISDIR
仅适用于现有目录.
在与O_CREATE相关的部分中,标准指定当命名文件不存在时,
如果未设置 O_DIRECTORY ,则应将文件创建为常规文件; [...]
但同样没有说明如果O_DIRECTORY
设置也会发生什么.
我看两者的手册页NetBSD的(这臭名昭著非常关心的POSIX兼容)和Linux的(这是一种广泛使用的系统,尽管实际上不是POSIX一个),但我无法找到任何澄清.
说两个标志的使用是否未指定是否正确?如果是这样,最常见的行为是什么?
是否open(name, O_CREAT|O_DIRECTORY, mode)
相当于mkdir
任何POSIX兼容的操作系统?