我已经有这个问题了很长时间。
假设t=0 sec
程序A
在/data
{{}}打开"w+"
个/data
个标记。它清除t=1 sec
干净并开始将数据写入此文件。
现在让我们说B
程序/data
打开带有"w+"
标志的同一文件B
并开始将数据写入此文件。到底发生了什么事?
程序/data
显然擦除A
干净并开始写入,而程序B
已经提前并且文件位置指针指向文件的某处。
此刻发生了什么事?操作系统如何知道文件的内容是什么?
假设bbbbbbbbbbbb...
写出100个字节的A
而a
一直在写aaaaaaaaa...
个字母 `bbbbbbbbbbbbbbbbbbb[100 b's] ??? what is happening here ?? aaaaaaaaaaaaaaaa...`
文件会发生什么?
是否会像:
b
a
和let parts = split(columnLetters, { $0 == "," })
之间是否会有空格?这个空地是什么?它不会是空格字符,因为没有程序写空格字符。那么文件中的空格是什么?
总的来说会发生什么?有人知道吗。我很困惑,我的脑袋在受伤。
答案 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...
因此,当打开第二个文件进行写入时,内核不会因为它被打开而截断文件,而只是从头开始覆盖。