Чи є a / dev / null в Windows?


Відповіді:


487

Я думаю, ви хочете NUL, принаймні в командному рядку або пакетних файлах.

Наприклад:

type c:\autoexec.bat > NUL

не створює файл.

вважаю, що це саме так, якщо ви спробуєте створити файл програмно, але я не намагався.)

У PowerShell вам потрібно $null:

echo 1 > $null

20
@capthive: різниця між /dev/null.txt та /dev/null/foo.txt.
Джон Скіт

2
Я просто переглянув це ще раз і відкликаю своє первісне твердження. Я робив запис у коді, і помилка проковтнула. Я його видаляю, щоб ніхто випадково не сприймав це як правду.
Джим Хунзікер

3
Для тих , хто шукає Unix «спеціальні» файли в Windows: тут є /dev/randomі /dev/zeroдрайвера пристроїв для Win32.
улідко

9
@CoDEmanX: Це не мій досвід. Запис на консоль - або навіть у файл - може зайняти значну частину часу. Я щойно перевірив це програмою, написавши "Здрастуйте, там", щоб пройти 10000000 разів. Перенаправлення на файл (на SSD) зайняло 18 секунд. Перенаправлення на NUL зайняло 4 секунди. Зовсім не перенаправлення змусило мене через деякий час відмовитися від відсутності терпіння ...
Джон Скіт

2
Я ще в Win95 раз дізнався, що ви повинні писати двокрапку після імен спеціальних пристроїв, так що NUL:CON:,, PRN:...), це здебільшого питання стилю і чітко показує, що NUL:це спеціальний об'єкт, а не файл, який називається NUL. Також можна за допомогою спеціального API зробити файл з назвою NUL(див. Одну з відповідей). Я мрію, що, можливо, одного разу, якщо всі будуть використовувати двокрапку умовно, ми зможемо знехтувати жахливі назви спеціальних пристроїв :-)
jdm

65

Відповідно до цього повідомлення у списку розсилки GCC , ви можете використовувати файл "nul" замість / 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;
}

(Подяку Денні за цей код; копіювання - вклеєне з його повідомлення.)

Ви також можете використовувати цей спеціальний "нуль" файл через перенаправлення.


1
Так, це пояснює, чому, якщо ви створюєте C:\devкаталог в Windows і використовуєте безліч утиліт GNU, з часом ви придбаєте загадковий файл під назвою null у цій директорії.
Клітос Кіріако

50

NULв Windows, здається, насправді є віртуальним шляхом до будь-якої папки. Так само, як ..і .в будь-якій файловій системі.

Використовуйте будь-яку папку з NUL.

Приклад,

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

мають той же ефект, що і в /dev/nullLinux.

Це було протестовано на Windows 7, 64 біт.


7
Приємно, що неможливо створити файл під назвою "нуль" на Windows 7 64bit :)
David Ferenczy Rogožan

7
@DawidFerenczy це можливо, хоча не класичним способом. Наприклад md \\.\c:\nul quora.com/… , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/…
phuclv

1
У Windows 10 в bash перший створює файлnul
DrumM

кидає IOException, використовуючи java у win10. Просто потрібно обернути його на спробу лову.
Сподівався

34

Джон Скіт правильний. Ось сторінка драйвера пристроїв Nul у документації до вбудованої Windows (я не маю поняття, чому це не десь інше ...).

Ось ще:


69
Звичайно, Джон Скіт правильний. Дякую, що виклали очевидну і універсальну істину :)
Р. Мартінхо Фернандес,

1
2 з посилань тут перервано. :(
Михайло Фукаракіс

9

NULпрацює також програмно. Наприклад:

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

працює як очікувалося, не створюючи файл. (MSVC ++ 12,0)


1
Існує лише стільки разів, на яке потрібно відповісти на це питання NUL, і це минуло було 5 років тому.
miken32

6
Я думаю, що ця відповідь додає вагомий внесок у дискусію.
Jeroen

3

Якщо вам потрібно виконати в Microsoft Windows еквівалент симпосилання /dev/nullв Linux, ви відкриєте і адміністратор, cmdі введіть:

Для файлів:

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

Або для каталогів:

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

Це дозволить зберегти файл / direcotry завжди на рівні 0 байт і все одно поверне успіх кожній спробі запису.


-1

Для цього в Windows PowerShell потрібно використовувати старт і $ NUL :

Введіть цю команду, припускаючи, що mySumце назва вашої програми, і 5 10це аргументи командного рядка, які ви надсилаєте.

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

startКоманда запустить дистанційний процес, такий же ефект &. Ця /Bопція не дозволяє відкрити нове вікно терміналу, якщо програма, яку ви запускаєте, є консольною програмою. і NULє еквівалентом Windows /dev/null. В 2>&1кінці буде переспрямовано stderr на stdout, до якого всі підуть NUL.


чому потік? поясніть, будь ласка
HaSeeB MiR
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.