node.js打开文件会覆盖现有文件

时间:2016-04-29 10:06:27

标签: javascript c node.js file mmap

我在c中创建一个文件:

int fd;
fd = open(filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);

if (fd == -1) {
    return NULL;
}

lseek(fd, filesize + 1, SEEK_SET);

write(fd, "", 1);

lseek(fd, 0, SEEK_SET);

void* file_memory = mmap(0, filesize, PROT_WRITE, MAP_SHARED, fd, 0);

close(fd);

所以,正如我所说,我创建文件并在将其映射到内存之前填充它。

当我查看文件系统中的文件时,它给了我1026个字节的文件大小(文件中的简单ls -l)

稍后我想从节点应用程序访问该文件简单,听起来像这样:

fs.open(filename, 'w', function (err, fd) { ... }

当执行此行时,filesize将被设置为0(同样是一个简单的ls -l)。

我认为该文件已被重新创建?但是这不应该发生,因为文件已经存在(根据node.js手册)。

这里发生了什么?我做错了什么?

2 个答案:

答案 0 :(得分:0)

当我使用' w +'国旗,它有效。

不知道为什么,因为' w +'意味着它可以在“' w”的同时读写文件。意味着它只能写文件。

fs.open(filename,' w',function(err,fd){...}

修改

来自man fopen

瓦特

将文件截断为长度或创建用于写入的文本文件。流位于文件的开头。

W +

开放阅读和写作。如果文件不存在,则创建该文件,否则将被截断。流位于文件的开头。

答案 1 :(得分:0)

你是对的,w标志重新创建文件。如果要在文件末尾写入,请使用a(追加)标记。