Existe um / dev / null no Windows?

414

Qual é o equivalente /dev/nullno Windows?

Ove S
fonte

Respostas:

489

Eu acho que você quer NUL, pelo menos dentro de um prompt de comando ou arquivos em lotes.

Por exemplo:

type c:\autoexec.bat > NUL

não cria um arquivo.

( Acredito que o mesmo seja verdade se você tentar criar um arquivo programaticamente, mas eu não tentei.)

No PowerShell, você deseja $null:

echo 1 > $null
Jon Skeet
fonte
20
@capthive: Há uma diferença entre /dev/null.txt e /dev/null/foo.txt.
Jon Skeet
2
Acabei de olhar para isso novamente e retiro minha afirmação original. Eu estava escrevendo o código e o erro foi engolido. Estou excluindo para que ninguém acidentalmente tome isso como verdade.
Jim Hunziker
3
Para quem procura arquivos "especiais" do Unix no Windows: aqui estão /dev/randome /dev/zerodrivers de dispositivo para o Win32.
ulidtko
9
@CoDEmanX: Essa não é a minha experiência. Escrever no console - ou mesmo em um arquivo - pode levar um tempo significativo. Acabei de testá-lo com um programa escrevendo "Olá!" Para stdout 10000000 vezes. O redirecionamento para um arquivo (em um SSD) levou 18 segundos. Redirecionar para NUL levou 4 segundos. Não redirecionando em tudo me fez desistir por falta de paciência depois de um tempo ...
Jon Skeet
2
Aprendi nos tempos do Win95 que você deve escrever dois pontos após nomes de dispositivos especiais; portanto, NUL:(e CON:, PRN:...), é principalmente uma questão de estilo e mostra claramente que esse NUL:é um objeto especial e não um arquivo chamado NUL. Além disso, é possível com uma API especial criar um arquivo chamado NUL(consulte uma das respostas). Eu sonho que talvez um dia, se todo mundo usa o cólon por convenção, que será capaz de depreciar os nomes de dispositivo especial temidas :-)
jdm
65

De acordo com esta mensagem na lista de correio do GCC , você pode usar o arquivo "nul" em vez 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 esse código; cópia colada de sua mensagem.)

Você também pode usar esse arquivo "nul" especial através do redirecionamento.

strager
fonte
1
Ah, então isso explica por que, se você criar um C:\devdiretório no Windows e usar muitos utilitários GNU, acabará adquirindo um arquivo misterioso chamado nulo nesse diretório.
Klitos Kyriacou
50

NULno Windows parece ser realmente um caminho virtual em qualquer pasta. Assim como .., .em qualquer sistema de arquivos.

Use qualquer pasta seguida com NUL funcionará.

Exemplo,

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

tem o mesmo efeito que /dev/nullno Linux.

Isso foi testado no Windows 7, 64 bits.

Jerry
fonte
7
Bom, não é possível criar um arquivo chamado "nul" no Windows 7 64bit :)
David Ferenczy Rogožan
7
@DawidFerenczy é possível, embora não da maneira clássica. Por md \\.\c:\nul exemplo , quora.com/… , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/…
phuclv
1
No Windows 10 em bash, o primeiro cria um arquivonul
Drumm
lança IOException usando java no win10. Só precisa embrulhá-lo na tentativa de captura. Esperava haver nenhuma exceção / erros como / dev / null
MDuh 17/03
34

Jon Skeet está correto. Aqui está a página Nul Device Driver na documentação do Windows Embedded (não faço idéia por que não está em outro lugar ...).

Aqui está outro:

Foredecker
fonte
69
Claro que Jon Skeet está correto. Obrigado por afirmando uma verdade óbvia e universal :)
R. Martinho Fernandes
1
2 dos links aqui estão quebrados agora. :(
Michael Foukarakis
9

NULfunciona programaticamente também. Por exemplo, o seguinte:

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

funciona como esperado sem criar um arquivo. (MSVC ++ 12.0)

ava
fonte
1
Há tantas vezes que a pergunta precisa ser respondida NULe já passara desse ponto há cinco anos.
precisa saber é o seguinte
6
Eu acho que esta resposta adiciona uma contribuição válida para a discussão.
Jeroen
3

Se você precisar executar no Microsoft Windows o equivalente a um link simbólico /dev/nullno Linux, abra e administrador cmde digite:

Para arquivos:

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

Ou, para diretórios:

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

Isso manterá o arquivo / diretório sempre em 0 byte e ainda retornará êxito a todas as tentativas de gravação.

Marco
fonte
-1

Você precisa usar start e $ NUL para isso no Windows PowerShell :

Digite este comando assumindo que mySumé o nome do seu aplicativo e os 5 10argumentos da linha de comando que você está enviando.

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

O startcomando iniciará um processo desanexado, um efeito semelhante ao &. A /Bopção impede o início de abrir uma nova janela do terminal se o programa que você está executando for um aplicativo de console. e NULé equivalente ao Windows /dev/null. O 2>&1final redirecionará o stderr para o stdout, que irá todos para NUL.

HaSeeB MiR
fonte
por que o voto negativo? por favor explique
HaSeeB MiR 17/01