Есть ли / dev / null в Windows?

Ответы:

489

Я думаю, что вы хотите 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.
ulidtko
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;
}

(Кредиты Дэнни за этот код; скопированы из его сообщения.)

Вы также можете использовать этот специальный файл "nul" через перенаправление.

strager
источник
1
Это объясняет, почему, если вы создаете C:\devкаталог в Windows и используете много утилит GNU, вы в конечном итоге получите таинственный файл с именем null в этом каталоге.
Klitos Kyriacou
50

NULв Windows, кажется, на самом деле виртуальный путь в любой папке. Так же , как .., .в любой файловой системе.

Используйте любую папку с NUL будет работать.

Пример,

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

имеют тот же эффект, что и /dev/nullв Linux.

Это было проверено на Windows 7, 64 бит.

Джерри
источник
7
Хорошо, невозможно создать файл с именем "nul" в 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. Просто нужно обернуть его на попытку поймать. Надеюсь быть без исключений / ошибок, как / dev / null
MDuh
34

Джон Скит прав. Вот страница Nul Device Driver в документации Windows Embedded (я понятия не имею, почему это не где-то еще ...).

Вот еще один:

Foredecker
источник
69
Конечно, Джон Скит прав. Спасибо за утверждение очевидной и универсальной правды :)
Р. Мартиньо Фернандес
1
2 ссылки здесь не работают. :(
Майкл Фукаракис
9

NULработает программно, а также. Например, следующее:

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

работает как положено без создания файла. (MSVC ++ 12.0)

AVA
источник
1
Есть только очень много раз, на которые нужно ответить на вопрос NUL, и это было позади этого момента 5 лет назад.
miken32
6
Я думаю, что этот ответ добавляет весомый вклад в обсуждение.
Йерун
3

Если вам нужно выполнить в Microsoft Windows эквивалент символической ссылки /dev/nullв Linux, которую вы откроете, cmdвведите администратор и введите:

Для файлов:

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

Или для каталогов:

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

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

Marco
источник
-1

Для этого вы должны использовать start и $ NUL в Windows PowerShell :

Введите эту команду, предполагая, что mySumэто имя вашего приложения и 5 10аргументы командной строки, которые вы отправляете.

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

Команда startзапустит отдельный процесс, аналогичный эффекту &. Эта /Bопция запрещает запуску открытия нового окна терминала, если запущенная программа является консольным приложением. и NULявляется эквивалентом Windows /dev/null. The 2>&1в конце перенаправит stderr в stdout, который все пойдет в NUL.

HaSeeB MiR
источник
почему отрицание? пожалуйста, объясните
HaSeeB MiR