gpt4 book ai didi

file - 如果两个程序打开同一个文件写入 ("w+") 并开始写入,(在 Linux 上)会发生什么?

转载 作者:行者123 更新时间:2023-12-01 06:41:13 24 4
gpt4 key购买 nike

这个问题我想了很久

假设在时间 t=0 sec 程序 A 打开文件 /data 带有 "w+" 标志.它会清除 /data 并开始将数据写入此文件。

现在假设在 t=1 sec 程序 B 打开同一个文件 /data with "w+" 标记并开始将数据写入此文件。现在到底发生了什么?

程序 B 显然删除 /data 并从头开始写入,而程序 A 已经前进并有一个文件位置指针指向在文件的某处。

这时候到底发生了什么?操作系统如何知道文件的内容是什么?

假设 B 写了 100 个字节的 bbbbbbbbbbbb...A 一直在写很多 a 字母aaaaaaaaa...

文件会发生什么?

会不会像:

 `bbbbbbbbbbbbbbbbbbb[100 b's] ??? what is happening here ??  aaaaaaaaaaaaaaaa...`

ba 之间是否会有空格?这个空的空间是什么?它不会是空格字符,因为没有程序写入空格字符。那么文件中的空格是什么?

总体上会发生什么?有人知道吗。我很困惑,我的头很疼。

最佳答案

所以这里有一些 node.js - 我们开始每毫秒写一个 a 然后写一个 b 并在 100 毫秒后退出:

const fs = require('fs');

const w1 = fs.createWriteStream('test', {flags: 'w+'});
const w2 = fs.createWriteStream('test', {flags: 'w+'});

setInterval(function writerA() {
w1.write('a');
}, 1);

setTimeout(function () {
//setInterval(function writerB() {
w2.write('b');
//}, 1);
}, 100);

setTimeout(function stop() {
w1.close();
w2.close();
process.exit();
}, 100);

使用 'w+' 或 'w' 对写入的内容没有影响,因为 '+' 只允许您从同一个句柄读取。我得到的结果是:

baaaaaaaaaaaaaaaaaaaaa...

因此当打开第二个文件进行写入时,内核不会因为文件打开而截断该文件,而是从头开始覆盖。

关于file - 如果两个程序打开同一个文件写入 ("w+") 并开始写入,(在 Linux 上)会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32361547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com