Czy w systemie Windows jest opcja / dev / null?

414

Co to jest odpowiednik /dev/nullw systemie Windows?

Ove S.
źródło

Odpowiedzi:

487

Myślę, że chcesz NUL, przynajmniej w wierszu polecenia lub plikach wsadowych.

Na przykład:

type c:\autoexec.bat > NUL

nie tworzy pliku.

( Wierzę , że to samo jest prawdą, jeśli próbujesz utworzyć plik programowo, ale nie próbowałem tego.)

W PowerShell chcesz $null:

echo 1 > $null
Jon Skeet
źródło
20
@capthive: Istnieje różnica między /dev/null.txt i /dev/null/foo.txt.
Jon Skeet
2
Jeszcze raz na to spojrzałem i wycofuję swoje oryginalne oświadczenie. Pisałem w kodzie i błąd został połknięty. Usuwam to, żeby nikt przypadkowo nie uznał tego za prawdę.
Jim Hunziker,
3
Dla osób szukających Unix „specjalnych” plików pod Windows: tu/dev/randomi /dev/zerosterowników dla Win32.
ulidtko
9
@CoDEmanX: To nie jest moje doświadczenie. Pisanie na konsoli - a nawet pliku - może zająć sporo czasu. Właśnie przetestowałem to z programem piszącym „Hello there” na 10000000 razy. Przekierowanie do pliku (na dysku SSD) zajęło 18 sekund. Przekierowanie do NUL zajęło 4 sekundy. W ogóle nie przekierowanie sprawiło, że po pewnym czasie zrezygnowałem z cierpliwości ...
Jon Skeet
2
Już w czasach Win95 nauczyłem się, że powinieneś pisać dwukropek po specjalnych nazwach urządzeń, więc NUL:(i CON:, PRN:...), Jest to głównie kwestia stylu i wyraźnie pokazuje, że NUL:jest to specjalny obiekt, a nie plik o nazwie NUL. Możliwe jest także, dzięki specjalnemu API, utworzenie pliku o nazwie NUL(patrz jedna z odpowiedzi). Marzę, że może któregoś dnia, jeśli wszyscy użyją okrężnicy zgodnie z konwencją, będziemy mogli przestać bać się przerażających nazw specjalnych urządzeń :-)
jdm
65

Zgodnie z tą wiadomością na liście mailingowej GCC , możesz użyć pliku „nul” zamiast / 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;
}

(Podziękowania dla Danny'ego za ten kod; skopiowano z jego wiadomości).

Możesz również użyć tego specjalnego pliku „nul” poprzez przekierowanie.

strager
źródło
1
Ach, więc to wyjaśnia, dlaczego jeśli utworzysz C:\devkatalog w systemie Windows i użyjesz wielu narzędzi GNU, w końcu uzyskasz w tym katalogu tajemniczy plik o nazwie null.
Klitos Kyriacou
50

NULw systemie Windows wydaje się być wirtualną ścieżką w dowolnym folderze. Podobnie jak .., .w każdym systemie.

Użyj dowolnego folderu z NUL będzie działać.

Przykład,

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

mają taki sam efekt jak /dev/nullw Linuksie.

Zostało to przetestowane w systemie Windows 7, 64-bitowym.

Nocnik
źródło
7
Fajnie, nie można utworzyć pliku o nazwie „nul” w systemie Windows 7 64bit :)
David Ferenczy Rogožan
7
@DawidFerenczy jest to możliwe, choć nie w klasyczny sposób. Np. md \\.\c:\nul Quora.com/… , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/…
phuclv
1
W systemie Windows 10 w wersji bash pierwszy tworzy pliknul
DrumM
zgłasza wyjątek IOException przy użyciu java w win10. Wystarczy owinąć go przy próbie złapania.
Miałem
34

Jon Skeet ma rację. Oto strona sterownika urządzenia Nul w dokumentacji Windows Embedded (nie mam pojęcia, dlaczego nie ma go gdzie indziej ...).

Oto kolejna:

Foredecker
źródło
69
Oczywiście, że Jon Skeet ma rację. Dziękujemy za stwierdzenie oczywistej i uniwersalnej prawdy :)
R. Martinho Fernandes
1
2 linki tutaj są teraz zepsute. :(
Michael Foukarakis
9

NULdziała również programowo. Np. Następujące:

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

działa zgodnie z oczekiwaniami bez tworzenia pliku. (MSVC ++ 12.0)

ava
źródło
1
Tylko tyle razy trzeba odpowiedzieć na to pytanie NUL, a minęło już to 5 lat temu.
miken32
6
Myślę, że ta odpowiedź stanowi ważny wkład do dyskusji.
Jeroen
3

Jeśli chcesz wykonać w systemie Microsoft Windows odpowiednik dowiązania symbolicznego do /dev/nulllinuksa, otwórz go cmdi wpisz administrator :

Dla plików:

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

Lub w przypadku katalogów:

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

Dzięki temu plik / direcotry zawsze będzie miał 0 bajtów i nadal zwróci sukces przy każdej próbie zapisu.

Marco
źródło
-1

Musisz użyć do tego start i $ NUL w Windows PowerShell :

Wpisz to polecenie, zakładając, że mySumjest to nazwa aplikacji i 5 10są to argumenty wiersza poleceń, które wysyłasz.

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

startPolecenie rozpoczęcia odłączoną procesu, podobny do efektu &. Ta /Bopcja uniemożliwia rozpoczęcie otwierania nowego okna terminala, jeśli uruchomiony program jest aplikacją konsolową. i NULjest odpowiednikiem systemu Windows /dev/null. Na 2>&1końcu przekieruje stderr na stdout, do którego wszyscy pójdą NUL.

HaSeeB MiR
źródło
dlaczego głosowanie negatywne? proszę wyjaśnić
HaSeeB MiR