POSIX 系统上是否有任何方法可以仅在目录不存在时自动创建目录?
相似
int fd = open( "/path/to/file", O_CREAT | O_EXCL | O_RDWR, 0644 );
Run Code Online (Sandbox Code Playgroud)
这不起作用:
int dfd = open( "/path/to/dir", O_DIRECTORY | O_CREAT | O_EXCL | O_RDWR, 0755 );
Run Code Online (Sandbox Code Playgroud)
失败对我的Solaris 11和Ubuntu 20.04系统errno设置为EINVAL在Solaris和ENOTDIRUbuntu上。
该POSIXopen()文件指出此为O_CREAT:
如果文件存在,则此标志无效,除非
O_EXCL如下所述。否则,如果O_DIRECTORY没有设置...
嗯,它不是一个文件,并且O_DIRECTORY已经设置好了。
(受到问题Race condition stat 和 mkdir 的启发- 如果目录尚不存在,POSIX 中似乎没有任何方法可以自动创建目录。)
为了回答标题中的问题, mkdir 这样做——不需要额外的标志,因为 mkdir 总是“原子地”创建一个目录,当且仅当它不存在时(并且路径不是文件)。
从评论来看,您似乎实际上想要自动创建并打开一个目录,但这似乎是一个 XY 问题。为什么,因为在任何情况下都无法打开目录进行写入?如果您首先创建然后打开目录(非原子地),则行为没有差异(并且没有竞争条件),就好像在此期间有人删除了目录,打开将失败。
如果您担心只在设置了权限的目录中创建文件,以致没有人(其他)可以读取它们,则可以在打开目录后检查该目录的权限和所有权(使用 fstat)。
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |