2012-06-15 13 views
11

Esto me está molestando desde hace varios días. Sé sobre la redirección de flujo estándar para el dispositivo NUL, pero este no es el caso. node.js usa CreateFileW bajo sus enlaces fs native/libuv.¿Cómo puedo escribir en el dispositivo NUL en Windows desde node.js?

Desafortunadamente usando algo como:

require('fs').writeFileSync('NUL', 'foo') 

crea un fichero nulo en el cwd que tiene 3 bytes.

Intenté escribir en \ Device \ Null, pero como soy casi un * nix head donde todo es un archivo, no pude encontrar realmente una ruta de trabajo para \ Device \ Null. Tales como \\. \ Device \ Null que arroja ENOENT.

¿Alguna idea sobre cómo hacer que esto funcione en Windows?

This parece estar relacionado, pero no puedo rastrear todo el flujo de lib/fs.js a uv/src/win/fs.c para comprobar que el argumento de ruta no adolece de algún tipo de relación con resolución de ruta absoluta.

+1

Tenga en cuenta que si funciona, pero intente con 'NUL:'. –

+0

Lo intenté antes de publicar la pregunta. No funciona. Lanza algún tipo de error de acceso denegado. No tiene una máquina con Windows en este momento para proporcionar los detalles. – SaltwaterC

Respuesta

5

ruta válida a NUL dispositivo es "\\\\.\\NUL", no NUL, por lo que el uso es: fs.writeFileSync("\\\\.\\NUL", "foo"). Esta cuestión se planteó en contra de Node.js en GitHub: https://github.com/nodejs/node-v0.x-archive/issues/9271

Desde NUL es un dispositivo, no un archivo, tiene que acceder a través de espacio de nombres de dispositivo - esto requiere poner \\.\ en el principio (las otras barras son para escapar) - Ver https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247.aspx#Win32_Device_Namespaces.

También hay una biblioteca dev-null simple en NPM que se puede utilizar con transmisiones: https://www.npmjs.com/package/dev-null (no con).

3

Hay una solución larga, como usted mismo. Pero puede tomar una idea desde aquí https://github.com/hanshuebner/node-hid/blob/master/src/HID.cc y escribir un contenedor sobre la biblioteca C.

+0

En lugar de pasar un método de envoltura para el dispositivo NUL (que detecta el sistema operativo y actúa en consecuencia), simplemente parcheé la biblioteca para no adjuntar ningún oyente de eventos de datos/final si se pasa nulo como argumento. Supongo que esta es la manera más fácil de hacer las cosas en lugar de dejar que el sistema operativo descarte los datos. – SaltwaterC

+0

Me alegra que hayas encontrado una solución funcional. ¿Puedes compartir tu código con la comunidad? :) –

+0

Es parte de [http-get] (https://github.com/SaltwaterC/http-get). – SaltwaterC

Cuestiones relacionadas