Czy w systemie Windows jest opcja / dev / null?


414

Co to jest odpowiednik /dev/nullw systemie Windows?

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

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.


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.


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


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)


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.


-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.


dlaczego głosowanie negatywne? proszę wyjaśnić
HaSeeB MiR
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.