Gibt es unter Windows ein / dev / null?

413

Was entspricht /dev/nullWindows?

Ove S.
quelle

Antworten:

486

Ich denke, Sie möchten NUL, zumindest innerhalb einer Eingabeaufforderung oder Batch-Dateien.

Zum Beispiel:

type c:\autoexec.bat > NUL

erstellt keine Datei.

(Ich glaube, dasselbe gilt, wenn Sie versuchen, eine Datei programmgesteuert zu erstellen, aber ich habe es nicht versucht.)

In PowerShell möchten Sie $null:

echo 1 > $null
Jon Skeet
quelle
20
@capthive: Es gibt einen Unterschied zwischen /dev/null.txt und /dev/null/foo.txt.
Jon Skeet
2
Ich habe mir das noch einmal angesehen und meine ursprüngliche Aussage zurückgezogen. Ich habe den Code geschrieben und der Fehler wurde verschluckt. Ich lösche es, damit niemand es versehentlich als die Wahrheit ansieht.
Jim Hunziker
3
Für Leute, die unter Windows nach "speziellen" Unix-Dateien suchen: Hier sind /dev/randomund /dev/zeroGerätetreiber für Win32.
Ulidtko
9
@CoDEmanX: Das ist nicht meine Erfahrung. Das Schreiben in die Konsole - oder sogar in eine Datei - kann viel Zeit in Anspruch nehmen. Ich habe es gerade mit einem Programm getestet, das "Hallo" schreibt, um 10000000 Mal zu stdout. Das Umleiten zu einer Datei (auf einer SSD) dauerte 18 Sekunden. Die Umleitung zu NUL dauerte 4 Sekunden. Wenn ich überhaupt nicht umleitete, gab ich nach einer Weile aus Mangel an Geduld auf ...
Jon Skeet
2
Ich habe in Win95-mal gelernt, dass Sie einen Doppelpunkt nach speziellen Gerätenamen schreiben sollten, also NUL:(und CON:, PRN:...). Es ist meistens eine Frage des Stils und zeigt deutlich, dass NUL:es sich um ein spezielles Objekt und nicht um eine aufgerufene Datei handelt NUL. Mit einer speziellen API ist es auch möglich, eine aufgerufene Datei zu erstellen NUL(siehe eine der Antworten). Ich träume davon, dass wir vielleicht eines Tages, wenn jeder den Doppelpunkt
gemäß
64

Entsprechend dieser Nachricht in der GCC-Mailingliste können Sie die Datei "nul" anstelle von / dev / null verwenden:

#include <stdio.h>

int main ()
{
    FILE* outfile = fopen ("/dev/null", "w");
    if (outfile == NULL)
    {
        fputs ("could not open '/dev/null'", stderr);
    }
    outfile = fopen ("nul", "w");
    if (outfile == NULL)
    {
        fputs ("could not open 'nul'", stderr);
    }

    return 0;
}

(Dank an Danny für diesen Code; kopiert aus seiner Nachricht.)

Sie können diese spezielle "nul" -Datei auch durch Umleitung verwenden.

Strager
quelle
1
Ah, das erklärt, warum Sie, wenn Sie ein C:\devVerzeichnis in Windows erstellen und viele GNU-Dienstprogramme verwenden, schließlich eine mysteriöse Datei mit dem Namen null in diesem Verzeichnis erhalten.
Klitos Kyriacou
50

NULin Windows scheint tatsächlich ein virtueller Pfad in einem beliebigen Ordner zu sein. Genau wie .., .in jedem Dateisystem.

Verwenden Sie einen beliebigen Ordner, dem NUL folgt.

Beispiel,

echo 1 > nul
echo 1 > c:\nul
echo 1 > c:\users\nul
echo 1 > c:\windows\nul

haben den gleichen Effekt wie /dev/nullunter Linux.

Dies wurde unter Windows 7, 64 Bit getestet.

Jerry
quelle
7
Schön, es ist nicht möglich, eine Datei mit dem Namen "nul" unter Windows 7 64bit zu erstellen :)
David Ferenczy Rogožan
7
@DawidFerenczy es ist möglich, wenn auch nicht auf klassische Weise. ZB md \\.\c:\nul quora.com/... , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/...
phuclv
1
Unter Windows 10 in Bash erstellt der erste eine Dateinul
DrumM
löst IOException mit Java in win10 aus. Sie müssen es nur einpacken, um es zu fangen.
Ich hatte
34

Jon Skeet ist richtig. Hier ist die Nul-Gerätetreiberseite in der Windows Embedded-Dokumentation (ich habe keine Ahnung, warum es nicht woanders ist ...).

Hier ist noch einer:

Vordecker
quelle
68
Natürlich ist Jon Skeet richtig. Vielen Dank für die Angabe einer offensichtlichen und universellen Wahrheit :)
R. Martinho Fernandes
1
2 der Links hier sind jetzt defekt. :(
Michael Foukarakis
9

NULfunktioniert auch programmgesteuert. ZB folgendes:

freopen("NUL", "w", stderr);

funktioniert wie erwartet, ohne eine Datei zu erstellen. (MSVC ++ 12.0)

ava
quelle
1
Es gibt nur so viele Male, mit denen die Frage beantwortet werden muss NUL, und es war vor 5 Jahren vorbei.
miken32
6
Ich denke, diese Antwort fügt einen gültigen Beitrag zur Diskussion hinzu.
Jeroen
3

Wenn Sie in Microsoft Windows das Äquivalent eines Symlinks zu /dev/nullLinux ausführen müssen, öffnen Sie und Administrator cmdund geben Sie Folgendes ein:

Für Dateien:

mklink c:\path\to\file.ext NUL:

Oder für Verzeichnisse:

mklink /D c:\path\to\dir NUL:

Dadurch bleibt die Datei / das Verzeichnis immer auf 0 Byte und der Erfolg wird bei jedem Schreibversuch zurückgegeben.

Marco
quelle
-1

In Windows PowerShell müssen Sie dafür start und $ NUL verwenden :

Geben Sie diesen Befehl ein, vorausgesetzt, es mySumhandelt sich um den Namen Ihrer Anwendung und 5 10um Befehlszeilenargumente, die Sie senden.

start .\mySum  5 10 > $NUL 2>&1

Der startBefehl startet einen getrennten Prozess, ähnlich wie bei &. Die /BOption verhindert, dass der Start ein neues Terminalfenster öffnet, wenn das von Ihnen ausgeführte Programm eine Konsolenanwendung ist. und NULentspricht Windows /dev/null. Am 2>&1Ende wird stderr zu stdout umgeleitet, zu dem alle gehen NUL.

HaSeeB MiR
quelle
Warum die Ablehnung? bitte erklären
HaSeeB MiR