C'è un / dev / null su Windows?


414

Qual è l'equivalente di /dev/nullsu Windows?

Risposte:


489

Penso che tu voglia NUL, almeno all'interno di un prompt dei comandi o file batch.

Per esempio:

type c:\autoexec.bat > NUL

non crea un file.

(Credo che lo stesso sia vero se provi a creare un file a livello di codice, ma non l'ho provato.)

In PowerShell, vuoi $null:

echo 1 > $null

20
@capthive: c'è una differenza tra /dev/null.txt e /dev/null/foo.txt.
Jon Skeet,

2
Ho appena guardato di nuovo questo, e ritiro la mia dichiarazione originale. Stavo scrivendo il codice e l'errore veniva ingoiato. Lo sto eliminando, quindi nessuno lo prende per caso come verità.
Jim Hunziker,

3
Per le persone in cerca di Unix file "speciali" in ambiente Windows: qui sono /dev/randome /dev/zerodriver di periferica per Win32.
Ulidtko,

9
@CoDEmanX: Questa non è la mia esperienza. Scrivere sulla console - o anche su un file - può richiedere molto tempo. L'ho appena provato con un programma che scrive "Hello there" per stdout 10000000 volte. Il reindirizzamento a un file (su un SSD) ha richiesto 18 secondi. Il reindirizzamento a NUL ha richiesto 4 secondi. Non reindirizzare affatto mi ha fatto rinunciare per mancanza di pazienza dopo un po '...
Jon Skeet,

2
Ho imparato in epoca di Win95 che si dovrebbe scrivere due punti dopo i nomi dei dispositivi speciali, in modo NUL:(e CON:, PRN:...), è in gran parte una questione di stile e mostra chiaramente che NUL:è un oggetto speciale e non un file chiamato NUL. Inoltre, è possibile con un'API speciale creare un file chiamato NUL(vedere una delle risposte). Sogno che forse un giorno, se tutti usano i due punti per convenzione, saremo in grado di deprecare i nomi dei dispositivi speciali temuti :-)
jdm,

65

Secondo questo messaggio sulla mailing list di GCC , puoi usare il file "nul" invece di / dev / null:

#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;
}

(Crediti a Danny per questo codice; copia-incolla dal suo messaggio.)

Puoi anche usare questo speciale file "nul" attraverso il reindirizzamento.


1
Ah, quindi questo spiega perché, se crei una C:\devdirectory in Windows e usi molte utility GNU, alla fine acquisirai un file misterioso chiamato null in quella directory.
Klitos Kyriacou il

50

NULin Windows sembra essere in realtà un percorso virtuale in qualsiasi cartella. Proprio come .., .in qualsiasi file system.

Utilizzare qualsiasi cartella seguita da NUL funzionerà.

Esempio,

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

avere lo stesso effetto di /dev/null su Linux.

Questo è stato testato su Windows 7, 64 bit.


7
Bello, non è possibile creare un file chiamato "nul" su Windows 7 64 bit :)
David Ferenczy Rogožan,

7
@DawidFerenczy è possibile, anche se non nel modo classico. Ad esempio md \\.\c:\nul quora.com/… , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/…
phuclv,

1
Su Windows 10 in bash, il primo crea un filenul
DrumM,

genera IOException usando java in win10. Devo solo avvolgerlo su provare a catturare. Speravo di non fare eccezione / errori proprio come / dev / null
MDuh


9

NULfunziona anche a livello di programmazione. Ad esempio il seguente:

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

funziona come previsto senza creare un file. (MSVC ++ 12.0)


1
Ci sono solo tante volte a cui bisogna rispondere alla domanda NUL, ed è passato da quel punto 5 anni fa.
miken32,

6
Penso che questa risposta aggiunga un valido contributo alla discussione.
Jeroen,

3

Se hai bisogno di eseguire in Microsoft Windows l'equivalente di un link simbolico a quello /dev/nullin Linux, apri e l'amministratore cmde digita:

Per i file:

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

Oppure, per le directory:

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

Ciò manterrà il file / directory sempre a 0 byte e restituirà comunque successo ad ogni tentativo di scrittura.


-1

Devi usare start e $ NUL per questo in Windows PowerShell :

Digita questo comando assumendo che mySumsia il nome della tua applicazione e 5 10sono gli argomenti della riga di comando che stai inviando.

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

Il startcomando avvierà un processo distaccato, un effetto simile a &. L' /Bopzione impedisce l'avvio di aprire una nuova finestra del terminale se il programma in esecuzione è un'applicazione console. ed NULè l'equivalente di Windows di /dev/null. Alla 2>&1fine reindirizzerà stderr a stdout, che andrà a tutti NUL.


perché il downvote? per favore spiega
HaSeeB MiR il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.