Windows下如何从node.js写入NUL设备?

问题描述 投票:0回答:3

这件事困扰了我好几天了。我知道标准流重定向到 NUL 设备,但事实并非如此。 node.js 在其 fs native/libuv 绑定下使用 CreateFileW。

不幸的是使用类似的东西:

require('fs').writeFileSync('NUL', 'foo')

在 3 个字节的 cwd 中创建一个 NUL 文件。

我尝试写入 \Device\Null,但由于我几乎是一个 *nix 头,一切都是文件,所以我未能真正找到 \Device\Null 的工作路径。例如 \.\Device\Null 会抛出 ENOENT。

关于如何在 Windows 下实现此功能有什么想法吗?

似乎是相关的,但我无法跟踪从 lib/fs.js 到 uv/src/win/fs.c 的整个流程来检查路径参数是否受到某种相对于绝对的影响路径分辨率。

windows node.js null device nul
3个回答
7
投票

NUL
设备的有效路径是
"\\\\.\\NUL"
,而不是
NUL
,所以用法是:
fs.writeFileSync("\\\\.\\NUL", "foo")
。此问题是针对 GitHub 上的 Node.js 提出的:https://github.com/nodejs/node-v0.x-archive/issues/9271

由于

NUL
是设备,而不是文件,因此必须通过设备命名空间访问它 - 这需要将
\\.\
放在开头(其他斜杠用于转义) - 请参阅 https://msdn.microsoft。 com/en-gb/library/windows/desktop/aa365247.aspx#Win32_Device_Namespaces

NPM 上还有一个简单的

dev-null
库,可以与流一起使用:https://www.npmjs.com/package/dev-null(但不能与
.writeFile
一起使用)。


3
投票

有一个很长的解决方法,比如自己编写代码。但是您可以从这里获取一个想法https://github.com/hanshuebner/node-hid/blob/master/src/HID.cc并编写一个C库的包装器。


0
投票

Node.js
通过
node:os
本机模块提供对空设备文件的正确操作系统路径的查找:

https://nodejs.org/docs/latest/api/os.html#osdevnull

例如

import { devNull } from 'node:os';

© www.soinside.com 2019 - 2024. All rights reserved.