Как я могу написать 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, чтобы проверить, что аргумент path не страдает от какого-либо отношения к абсолютному разрешению пути.

Ответ 1

Допустимый путь к устройству 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#Win32_Device_Namespaces.

Существует также простая библиотека dev-null на NPM, которая может использоваться с потоками: https://www.npmjs.com/package/dev-null (не с .writeFile, хотя).