Unix & Linux 文件并发 Read/Write 处理

Unix & Linux Files Concurrent Read/Write Handling

先了解一些信息。

Web 服务器文档根目录:/mySite/docroot/

CMS writes a **new** file index-new.html to a SAN/NAS filesystem (Linux/Unix): /mySite/docroot/

CMS writes to an **existing** file index-ex.html to a SAN/NAS filesystem (Linux/Unix): /mySite/docroot/

浏览器访问 /mySite/docroot/

下读取 index-new.html & index.ex.html 的 Web 服务器

问题来了

当 CMS 正在写入索引-new.html 和索引-ex.html(仅完成 50%)而 Web 服务器同时读取它们时,行为是什么?

文件写入时是否会被Linux/Unix自动锁定以避免其他进程读写?

如果是,Web 服务器是否会等到锁被释放,或者如果检测到锁 returns 错误?

如果没有,如何确保网络服务器发送的文件具有完整的地址?

没有。文件写入不是原子的。

这里的基本思路是创建一个临时文件并重命名。重命名文件是原子操作,因此会出现 "not exist" 错误或正确命中。

此外,在覆盖现有文件时,对 Linux 的 rename() 调用或对其他 OS 的等效调用将自动覆盖该文件。这样,您可以确保旧的或新的都以完整的形式提供。