如果有 2 个并发请求在文件系统中创建目录,会发生什么情况(已知 FS 之间关于这个问题有什么区别?)?一个请求会成功,另一个请求会失败并出现错误,还是另一个请求会覆盖第一个文件夹(我认为默认情况下这样做很愚蠢。只有我为此设置了选项)?这些操作是原子的吗?
答案1
其中一个会成功,另一个会失败。根据手册页,这是这样的:
EEXIST:路径名已存在(不一定是目录)。这包括路径名是符号链接的情况,无论是否悬空。
创建目录必然是原子性的,因为同时检查系统的任何其他进程要么发现新目录存在,要么发现它不存在。不存在部分创建的目录。
您无法设置选项来mkdir()
覆盖现有目录。当您尝试创建已存在的目录时,标准规定的行为是失败并显示上述错误代码。