Có / dev / null trên Windows không?


414

Tương đương /dev/nulltrên Windows là gì?

Câu trả lời:


489

Tôi nghĩ rằng bạn muốn NUL, ít nhất là trong một dấu nhắc lệnh hoặc các tệp bó.

Ví dụ:

type c:\autoexec.bat > NUL

không tạo một tập tin.

(Tôi tin điều tương tự cũng đúng nếu bạn cố gắng tạo một tệp theo chương trình, nhưng tôi đã không thử nó.)

Trong PowerShell, bạn muốn $null:

echo 1 > $null

20
@capthive: Có sự khác biệt giữa /dev/null.txt và /dev/null/foo.txt.
Jon Skeet

2
Tôi chỉ nhìn vào điều này một lần nữa, và tôi rút lại tuyên bố ban đầu của mình. Tôi đang viết mã, và lỗi đã bị nuốt. Tôi đang xóa nó để không ai vô tình coi đó là sự thật.
Jim Hunziker

3
Đối với những người tìm kiếm Unix file "đặc biệt" trong môi trường Windows: đây/dev/random/dev/zerotrình điều khiển thiết bị cho Win32.
ulidtko

9
@CoDEmanX: Đó không phải là kinh nghiệm của tôi. Viết thư cho bảng điều khiển - hoặc thậm chí là một tệp - có thể mất một khoảng thời gian đáng kể. Tôi vừa thử nghiệm nó với một chương trình viết "Xin chào" để xuất bản 10000000 lần. Chuyển hướng đến một tệp (trên SSD) mất 18 giây. Chuyển hướng đến NUL mất 4 giây. Không chuyển hướng chút nào khiến tôi bỏ cuộc vì thiếu kiên nhẫn sau một thời gian ...
Jon Skeet

2
Tôi đã học được trở lại trong Win95 thời gian mà bạn nên viết một dấu hai chấm sau tên thiết bị đặc biệt, vì vậy NUL:(và CON:, PRN:...), Nó chủ yếu là một vấn đề của phong cách và hiển thị rõ ràng rằng NUL:là một đối tượng đặc biệt và không phải là một tập tin gọi là NUL. Ngoài ra, có thể với một API đặc biệt để tạo một tệp có tên NUL(xem một trong các câu trả lời). Tôi mơ ước có thể một ngày nào đó, nếu mọi người sử dụng dấu hai chấm theo quy ước, chúng ta sẽ có thể loại bỏ các tên thiết bị đặc biệt đáng sợ :-)
jdm

65

Theo thông báo này trong danh sách gửi thư của GCC , bạn có thể sử dụng tệp "nul" thay vì / 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;
}

(Tín dụng cho Daniel cho mã này; sao chép từ tin nhắn của anh ấy.)

Bạn cũng có thể sử dụng tệp "nul" đặc biệt này thông qua chuyển hướng.


1
À, vậy điều này giải thích tại sao, nếu bạn tạo một C:\devthư mục trong Windows và bạn sử dụng nhiều tiện ích GNU, cuối cùng bạn sẽ có được một tệp bí ẩn có tên null trong thư mục đó.
Klitos Kyriacou

50

NULtrong Windows dường như thực sự là một đường dẫn ảo trong bất kỳ thư mục nào. Giống như .., .trong bất kỳ hệ thống tập tin.

Sử dụng bất kỳ thư mục theo sau với NUL sẽ hoạt động.

Thí dụ,

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

có tác dụng tương tự như /dev/nulltrên Linux.

Điều này đã được thử nghiệm trên Windows 7, 64 bit.


7
Thật tuyệt, không thể tạo một tệp có tên "nul" trên Windows 7 64 bit :)
David Ferenczy Rogožan

7
@DawidFerenczy có thể, mặc dù không phải theo cách cổ điển. Ví dụ: md \\.\c:\nul quora.com/ rủi , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/
phỏng

1
Trên Windows 10 trong bash, cái đầu tiên tạo một tệpnul
DrumM

ném IOException bằng cách sử dụng java trong win10. Chỉ cần bọc nó trên thử bắt. Hy vọng sẽ không có ngoại lệ / lỗi giống như / dev / null
MDuh

34

Jon Skeet là chính xác. Đây là trang Trình điều khiển thiết bị Nul trong tài liệu nhúng của Windows (Tôi không biết tại sao nó không ở đâu khác ...).

Đây là một:


69
Tất nhiên Jon Skeet là chính xác. Cảm ơn bạn đã nêu rõ một sự thật hiển nhiên và phổ quát :)
R. Martinho Fernandes

1
2 trong số các liên kết ở đây hiện đang bị hỏng. :(
Michael Foukarakis

9

NULlàm việc theo chương trình là tốt. Ví dụ như sau:

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

hoạt động như mong đợi mà không tạo tập tin. (MSVC ++ 12.0)


1
Chỉ có rất nhiều lần câu hỏi cần được trả lời NUL, và nó đã qua thời điểm đó 5 năm trước.
miken32

6
Tôi nghĩ rằng câu trả lời này thêm một đóng góp hợp lệ cho các cuộc thảo luận.
Jeroen

3

Nếu bạn cần thực hiện trong Microsoft Windows, tương đương với một liên kết tượng trưng /dev/nulltrong Linux, bạn sẽ mở và quản trị viên cmdvà gõ:

Đối với tệp:

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

Hoặc, cho các thư mục:

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

Điều này sẽ giữ cho tập tin / direcotry luôn ở mức 0 byte và vẫn trả lại thành công cho mỗi lần ghi.


-1

Bạn phải sử dụng start$ NUL cho điều này trong Windows PowerShell :

Nhập vào lệnh này giả sử mySumlà tên của ứng dụng của bạn và 5 10là đối số dòng lệnh bạn đang gửi.

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

Các startlệnh sẽ bắt đầu một quá trình tách ra, một hiệu ứng tương tự như &. Các /Bngăn chặn tùy chọn bắt đầu từ việc mở một cửa sổ terminal mới nếu chương trình bạn đang chạy là một ứng dụng console. và NULtương đương với Windows /dev/null. Các 2>&1cuối cùng sẽ chuyển hướng stderr để stdout, mà tất cả sẽ đi đến NUL.


Tại sao các downvote? vui lòng giải thích
HaSeeB MiR
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.