Apakah ada / dev / null di Windows?


414

Apa yang setara dengan /dev/nulldi Windows?

Jawaban:


489

Saya pikir Anda ingin NUL, setidaknya dalam prompt perintah atau file batch.

Sebagai contoh:

type c:\autoexec.bat > NUL

tidak membuat file.

(Saya percaya hal yang sama berlaku jika Anda mencoba membuat file secara terprogram, tetapi saya belum mencobanya.)

Di PowerShell, Anda ingin $null:

echo 1 > $null

20
@capthive: Ada perbedaan antara /dev/null.txt dan /dev/null/foo.txt.
Jon Skeet

2
Saya hanya melihat ini lagi, dan saya menarik kembali pernyataan asli saya. Saya sedang menulis kode, dan kesalahannya tertelan. Saya menghapusnya sehingga tidak ada yang secara tidak sengaja menganggapnya sebagai kebenaran.
Jim Hunziker

3
Untuk orang yang mencari file Unix "khusus" di Windows: berikut ini /dev/randomdan /dev/zerodriver perangkat untuk Win32.
ulidtko

9
@CoDEmanX: Itu bukan pengalaman saya. Menulis ke konsol - atau bahkan file - dapat mengambil banyak waktu. Saya baru saja mengujinya dengan program menulis "Halo di sana" untuk stdout 10000000 kali. Mengarahkan kembali ke file (pada SSD) membutuhkan waktu 18 detik. Mengarahkan kembali ke NUL membutuhkan waktu 4 detik. Tidak mengalihkan sama sekali membuat saya menyerah melalui kurangnya kesabaran setelah beberapa saat ...
Jon Skeet

2
Saya telah belajar kembali Win95 kali bahwa Anda harus menulis usus setelah nama perangkat khusus, sehingga NUL:(dan CON:, PRN:, ...), Hal ini sebagian besar soal gaya dan menunjukkan dengan jelas bahwa NUL:adalah objek khusus dan bukan file disebut NUL. Juga, dimungkinkan dengan API khusus untuk membuat file bernama NUL(lihat salah satu jawabannya). Saya bermimpi bahwa mungkin suatu hari, jika semua orang menggunakan usus besar dengan konvensi, kita akan dapat mencela nama-nama perangkat khusus yang ditakuti :-)
jdm

65

Menurut pesan ini di milis GCC , Anda dapat menggunakan file "nul" alih-alih / 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;
}

(Kredit untuk Danny untuk kode ini; disalin dari pesannya.)

Anda juga dapat menggunakan file "nul" khusus ini melalui pengalihan.


1
Ah, jadi ini menjelaskan mengapa, jika Anda membuat C:\devdirektori di Windows, dan Anda menggunakan banyak utilitas GNU, Anda akhirnya akan mendapatkan file misterius yang disebut null di direktori itu.
Klitos Kyriacou

50

NULdi Windows tampaknya sebenarnya adalah jalur virtual di folder apa pun. Sama seperti .., .dalam sistem file apa pun.

Gunakan folder apa pun yang diikuti dengan NUL akan berfungsi.

Contoh,

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

memiliki efek yang sama seperti /dev/nulldi Linux.

Ini diuji pada Windows 7, 64 bit.


7
Bagus, tidak mungkin membuat file bernama "nul" di Windows 7 64bit :)
David Ferenczy Rogožan

7
@ DawidFerenczy itu mungkin, meskipun tidak dengan cara klasik. Misalnya md \\.\c:\nul quora.com/… , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/…
phuclv

1
Pada Windows 10 di bash, yang pertama membuat filenul
DrumM

melempar IOException menggunakan java di win10. Hanya perlu membungkusnya pada try catch. Berharap ada pengecualian / kesalahan seperti / dev / null
MDuh


9

NULbekerja secara terprogram juga. Misalnya yang berikut:

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

berfungsi seperti yang diharapkan tanpa membuat file. (MSVC ++ 12.0)


1
Hanya ada beberapa kali pertanyaan itu perlu dijawab NUL, dan sudah melewati titik itu 5 tahun yang lalu.
miken32

6
Saya pikir jawaban ini menambah kontribusi yang valid untuk diskusi.
Jeroen

3

Jika Anda perlu melakukan di Microsoft Windows yang setara dengan symlink /dev/nulldi Linux Anda akan membuka dan administrator cmddan ketik:

Untuk file:

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

Atau, untuk direktori:

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

Ini akan membuat file / direcotry selalu pada 0 byte, dan tetap mengembalikan kesuksesan untuk setiap upaya menulis.


-1

Anda harus menggunakan start dan $ NUL untuk ini di Windows PowerShell :

Ketik perintah ini dengan asumsi mySumadalah nama aplikasi Anda dan 5 10merupakan argumen baris perintah yang Anda kirim.

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

The startperintah akan memulai proses terpisah, efek yang sama dengan &. The /Bmencegah pilihan mulai dari membuka jendela terminal baru jika program Anda menjalankan adalah aplikasi konsol. dan NULsetara dengan Windows /dev/null. Pada 2>&1akhirnya akan mengarahkan stderr ke stdout, yang semuanya akan pergi ke NUL.


mengapa downvote? tolong jelaskan
HaSeeB MiR
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.