Как я могу написать 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
, хотя).
Ответ 2
Существует длинное обходное решение, например, код. Но вы можете подумать отсюда https://github.com/hanshuebner/node-hid/blob/master/src/HID.cc и написать обертку над библиотекой C.