2012-06-15 4 views
11

Das nervt mich seit einigen Tagen. Ich kenne die Standard-Stream-Umleitung zum NUL-Gerät, aber das ist nicht der Fall. node.js verwendet CreateFileW unter seinen fs native/libuv Bindings.Wie kann ich von Node.js auf das NUL-Gerät unter Windows schreiben?

Leider etwas mit wie:

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

erstellt eine NUL-Datei in die CWD, die 3 Bytes hat.

Ich habe versucht, das \ Device \ Null zu schreiben, aber da ich ziemlich viel ein * nix Kopf bin, wo alles eine Datei ist, konnte ich keinen Arbeitspfad für \ Device \ Null finden. Wie \\. \ Device \ Null, das ENOENT auslöst.

Haben Sie Ideen, wie dies unter Windows funktioniert?

This scheint verwandt zu sein, aber ich kann nicht den gesamten Fluss von lib/fs.js zu uv/src/win/fs.c verfolgen, um zu überprüfen, dass das Pfadargument nicht unter irgendeiner Art von Beziehung leidet absolute Pfadauflösung.

+1

Beachten Sie, ob es funktioniert, aber versuchen Sie 'NUL:'. –

+0

Versucht es, bevor Sie die Frage stellen. Funktioniert nicht. Wirft eine Art von Zugriff verweigert Fehler. Haben Sie keine Windows-Maschine im Moment, um die Einzelheiten zu liefern. – SaltwaterC

Antwort

5

Gültiger Pfad zu NUL Gerät ist "\\\\.\\NUL", nicht NUL, so dass die Nutzung ist: fs.writeFileSync("\\\\.\\NUL", "foo"). Dieses Problem angesprochen wurde gegen Node.js auf GitHub: https://github.com/nodejs/node-v0.x-archive/issues/9271

Da NUL ist ein Gerät, nicht eine Datei, hat es über den Gerätenamensraum zugegriffen werden - dies erfordert \\.\ am Anfang (die anderen Schrägstriche sind für die Flucht) setzen - siehe https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247.aspx#Win32_Device_Namespaces.

Es gibt auch eine einfache dev-null Bibliothek auf NPM, die mit Streams verwendet werden kann: https://www.npmjs.com/package/dev-null (nicht mit .writeFile obwohl).

3

Es gibt eine lange Problemumgehung, wie Code es selbst. Aber Sie können eine Idee von hier https://github.com/hanshuebner/node-hid/blob/master/src/HID.cc nehmen und einen Wrapper über C-Bibliothek schreiben.

+0

Anstatt eine Wrapper-Methode für das NUL-Gerät zu übergeben (das das Betriebssystem erkennt und entsprechend handelt), habe ich einfach die Bibliothek gepatcht, um keine Daten-/End-Ereignis-Listener anzuhängen, wenn NULL als Argument übergeben wird. Ich denke, das ist der einfachste Weg, Dinge zu tun, anstatt das OS die Daten verwerfen zu lassen. – SaltwaterC

+0

Ich freue mich, dass Sie eine funktionierende Lösung gefunden haben. Können Sie Ihren Code mit der Community teilen? :) –

+0

Es ist Teil von [http-get] (https://github.com/SaltwaterC/http-get). – SaltwaterC

Verwandte Themen