【问题标题】:node.js open file overrides existing filenode.js 打开文件覆盖现有文件
【发布时间】:2016-04-29 10:06:26
【问题描述】:

我正在像这样在 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) { ... }

当这一行被执行时,文件大小被设置为 0(同样是一个简单的 ls -l)。

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

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

【问题讨论】:

    标签: javascript c node.js file mmap


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      当我使用 'w+' 标志时,它可以工作。

      不知道为什么,因为'w+'表示它可以读写文件,而'w'表示它只能写文件。

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

      编辑

      来自man fopen

      w

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

      w+

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        • 2016-05-12
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2016-03-23
        • 2012-04-04
        相关资源
        最近更新 更多