Как я могу записать на NUL-устройство под Windows из node.js?
Это беспокоит меня уже несколько дней. Я знаю о стандартном перенаправлении потока на устройство NUL, но это не так. node.js использует CreateFileW под своими привязками fs native/libuv.
К сожалению, используя что-то вроде:
require('fs').writeFileSync('NUL', 'foo')
создает файл NUL в cwd, который имеет 3 байта.
Я попытался записать в \Device\Null, но, поскольку я в значительной степени являюсь * nix-головой, где все является файлом, мне не удалось найти рабочий путь для \Device\Null. Например, \\. \Device\Null, который выбрасывает ENOENT.
Любые идеи о том, как заставить это работать под Windows?
Похоже, это связано, но я не могу отследить весь поток от lib/fs.js до uv/src/win/fs.c, чтобы проверить, что аргумент пути не страдает от какого-то рода относительно абсолютного разрешения пути.
2 ответа
Действительный путь к NUL
устройство "\\\\.\\NUL"
не NUL
, так что использование это: fs.writeFileSync("\\\\.\\NUL", "foo")
, Эта проблема была поднята против Node.js на GitHub: https://github.com/nodejs/node-v0.x-archive/issues/9271
поскольку NUL
это устройство, а не файл, к нему нужно обращаться через пространство имен устройства - это требует \\.\
в начале (другие слэши предназначены для экранирования) - см. https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247.aspx.
Существует также простой dev-null
библиотека на NPM, которая может использоваться с потоками: https://www.npmjs.com/package/dev-null (не с .writeFile
хоть).
Существует длинный обходной путь, как, например, сам код. Но вы можете взять идею здесь https://github.com/hanshuebner/node-hid/blob/master/src/HID.cc и написать оболочку для библиотеки C.