Как я могу записать на 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.

Другие вопросы по тегам