¿Hay un / dev / null en Windows?

414

¿Cuál es el equivalente de /dev/nullen Windows?

Ove S
fuente

Respuestas:

489

Creo que lo desea NUL, al menos dentro de un símbolo del sistema o archivos por lotes.

Por ejemplo:

type c:\autoexec.bat > NUL

no crea un archivo

(Creo que lo mismo es cierto si intentas crear un archivo mediante programación, pero no lo he intentado).

En PowerShell, quieres $null:

echo 1 > $null
Jon Skeet
fuente
20
@capthive: Hay una diferencia entre /dev/null.txt y /dev/null/foo.txt.
Jon Skeet
2
Acabo de ver esto de nuevo y me retracto de mi declaración original. Estaba haciendo el código de escritura y el error se estaba tragando. Lo estoy eliminando para que nadie lo tome accidentalmente como la verdad.
Jim Hunziker
3
Para las personas que buscan archivos Unix "especiales" bajo Windows: aquí se encuentran /dev/randomy /dev/zerocontroladores de dispositivo para Win32.
ulidtko
99
@CoDEmanX: Esa no es mi experiencia. Escribir en la consola, o incluso en un archivo, puede llevar mucho tiempo. Lo acabo de probar con un programa que escribe "Hola" para stdout 10000000 veces. La redirección a un archivo (en un SSD) tomó 18 segundos. La redirección a NUL tomó 4 segundos. No redirigir en absoluto me hizo rendirme por falta de paciencia después de un tiempo ...
Jon Skeet
2
He aprendido en Win95 veces que debes escribir dos puntos después de nombres especiales de dispositivos, así que NUL:(y CON:, PRN:...), es principalmente una cuestión de estilo y muestra claramente que NUL:es un objeto especial y no un archivo llamado NUL. Además, es posible con una API especial hacer un archivo llamado NUL(ver una de las respuestas). Sueño con que tal vez algún día, si todos usan el colon por convención, podamos desaprobar los temidos nombres de dispositivos especiales :-)
jdm
65

De acuerdo con este mensaje en la lista de correo de GCC , puede usar el archivo "nul" en lugar de / 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;
}

(Créditos a Danny por este código; copiado de su mensaje).

También puede usar este archivo especial "nul" a través de la redirección.

extraño
fuente
1
Ah, esto explica por qué, si creas un C:\devdirectorio en Windows y utilizas muchas utilidades GNU, eventualmente adquirirás un archivo misterioso llamado nulo en ese directorio.
Klitos Kyriacou
50

NULen Windows parece ser en realidad una ruta virtual en cualquier carpeta. Al igual que .., .en cualquier sistema de archivos.

Usar cualquier carpeta seguida de NUL funcionará.

Ejemplo,

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

tener el mismo efecto que /dev/nullen Linux.

Esto fue probado en Windows 7, 64 bit.

alemán
fuente
77
Agradable, no es posible crear un archivo llamado "nul" en Windows 7 de 64 bits :)
David Ferenczy Rogožan
77
@DawidFerenczy es posible, aunque no de la manera clásica. Por ejemplo md \\.\c:\nul quora.com/... , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/...
phuclv
1
En Windows 10 en bash, el primero crea un archivonul
DrumM el
lanza IOException usando java en win10. Solo necesito envolverlo en try catch. Esperaba no haber excepciones / errores como / dev / null
MDuh
34

Jon Skeet está en lo correcto. Aquí está la página del controlador de dispositivo Nul en la documentación de Windows Embedded (no tengo idea de por qué no está en otro lugar ...).

Aquí está otro:

Foredecker
fuente
69
Por supuesto que Jon Skeet tiene razón. Gracias por declarar una verdad obvia y universal :)
R. Martinho Fernandes
1
2 de los enlaces aquí ahora están rotos. :(
Michael Foukarakis
9

NULfunciona programáticamente también. Por ejemplo, lo siguiente:

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

funciona como se espera sin crear un archivo. (MSVC ++ 12.0)

ava
fuente
1
Solo hay tantas veces que la pregunta necesita ser respondida NUL, y fue más allá de ese punto hace 5 años.
miken32
66
Creo que esta respuesta agrega una contribución válida a la discusión.
Jeroen
3

Si necesita realizar en Microsoft Windows el equivalente de un enlace simbólico a /dev/nullen Linux, debe abrir y administrador cmdy escribir:

Para archivos:

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

O, para directorios:

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

Esto mantendrá el archivo / directorio siempre en 0 bytes y aún así devolverá el éxito a cada intento de escritura.

Marco
fuente
-1

Debe usar start y $ NUL para esto en Windows PowerShell :

Escriba este comando asumiendo que mySumes el nombre de su aplicación y que 5 10son argumentos de línea de comando que está enviando.

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

El startcomando iniciará un proceso separado, un efecto similar a &. La /Bopción evita que el inicio abra una nueva ventana de terminal si el programa que está ejecutando es una aplicación de consola. y NULes el equivalente de Windows de /dev/null. Al 2>&1final redirigirá stderr a stdout, que irá a todos NUL.

HaSeeB MiR
fuente
¿Por qué el voto negativo? por favor explique
HaSeeB MiR