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

 SaltwaterC17 июн. 2012 г., 16:44
Пробовал, прежде чем отправлять вопрос. Не работает. Выдает какую-то ошибку в доступе отказано. На данный момент у вас нет компьютера с Windows, чтобы предоставить подробности.
 Harry Johnston16 июн. 2012 г., 06:23
Убедитесь, что это сработает, но попробуйте «NUL:».

Ответы на вопрос(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#Win32_Device_Namespaces.

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

Существует длинный обходной путь, например, сам код. Но вы можете взять идею отсюдаhttps://github.com/hanshuebner/node-hid/blob/master/src/HID.cc и написать обертку над библиотекой C.

 18 июн. 2012 г., 15:55
отличная работа. благодарю вас.
 SaltwaterC18 июн. 2012 г., 15:46
Это частьhttp-get.
 18 июн. 2012 г., 09:25
Я рад, что вы нашли рабочее решение. Можете ли вы поделиться своим кодом с сообществом? :)
 SaltwaterC18 июн. 2012 г., 08:47
Вместо того, чтобы передавать метод-обертку для устройства NUL (которое обнаруживает ОС и действует соответственно), я просто исправил библиотеку, чтобы не присоединять никаких слушателей данных / событий завершения, если в качестве аргумента передается значение null. Я предполагаю, что это более простой способ сделать что-либо, чем позволить ОС отбрасывать данные.

Ваш ответ на вопрос