当我尝试在保存/覆盖过程中读取文件时会发生什么?

问题描述 投票:0回答:1

假设我有一个包含多个文本的文件,我尝试用代码读取它。假设读取文件需要 15 秒。当我的代码开始读取并在第 7 秒时另一个进程尝试保存或覆盖它。在这种情况下会发生什么?操作系统是否允许保存/覆盖它,如果是,我的阅读过程是否会有任何问题?

process operating-system save filesystems background-process
1个回答
0
投票

这取决于操作系统。每个操作系统都有不同的行为。

在 Windows 上,文件在打开时可以被锁定,程序必须选择它可以容忍的共享访问:读取、写入和/或删除重命名。该程序还可以锁定文件的一部分,这将暂时拒绝其他程序对该部分的访问。

在 Linux 上,共享访问是默认设置。文件锁是存在的,但它们通常只能阻止其他锁——而不是没有锁的直接读取或写入。强制锁(确实阻止读取和写入的锁)可能会在文件系统上被禁用 - 它们会减慢所有文件访问速度。删除和重命名根本不被视为文件访问(它们被视为对父目录的写入)。删除后,打开该文件的程序仍可访问该文件,但文件关闭后该文件将永久消失。

一般来说,读取和写入不是原子的,读取可以看到写入数据和原始数据的某种组合。例如,如果文件包含

123
并且某人写入
ABC
,则读取应该期望
123
ABC
1B3
A2C
和一些类似的选项(但不是
123ABC
BC1
,或类似 - 无需重新排列位置)。

© www.soinside.com 2019 - 2024. All rights reserved.