如果两个程序打开相同的文件进行写入(“w +”)并开始编写,会发生什么(在Linux上)?

时间:2015-09-02 19:27:40

标签: file file-io

我已经有这个问题了很长时间。

假设t=0 sec程序A/data {{}}打开"w+"/data个标记。它清除t=1 sec干净并开始将数据写入此文件。

现在让我们说B程序/data打开带有"w+"标志的同一文件B并开始将数据写入此文件。到底发生了什么事?

程序/data显然擦除A干净并开始写入,而程序B已经提前并且文件位置指针指向文件的某处。

此刻发生了什么事?操作系统如何知道文件的内容是什么?

假设bbbbbbbbbbbb...写出100个字节的Aa一直在写aaaaaaaaa...个字母 `bbbbbbbbbbbbbbbbbbb[100 b's] ??? what is happening here ?? aaaaaaaaaaaaaaaa...`

文件会发生什么?

是否会像:

b

alet parts = split(columnLetters, { $0 == "," }) 之间是否会有空格?这个空地是什么?它不会是空格字符,因为没有程序写空格字符。那么文件中的空格是什么?

总的来说会发生什么?有人知道吗。我很困惑,我的脑袋在受伤。

1 个答案:

答案 0 :(得分:1)

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

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...

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