Что эквивалентно /dev/null в Windows?





Я думаю, вам нужен NUL, по крайней мере, в командной строке или в пакетных файлах.
Например:
type c:\autoexec.bat > NUL
не создает файл.
(У меня полагать то же самое верно, если вы пытаетесь создать файл программно, но я не пробовал.)
В PowerShell вам нужен $null:
echo 1 > $null
В Ubuntu: echo blah> /dev/null.txt bash: /dev/null.txt: Permission denied Может быть, это что-то специфическое для вашей системы ...
@capthive: есть разница между /dev/null.txt и /dev/null/foo.txt.
Я просто посмотрел на это еще раз и отказываюсь от своего первоначального утверждения. Я писал код, и ошибка проглатывалась. Удаляю, чтобы случайно никто не принял за правду.
$null в качестве пункта назначения, если указан с помощью --output-document=$null. NUL короче, поэтому я буду использовать его!
@Marwelln: Это точно не в Windows 8.0. echo foo > NULL, затем echo foo > NUL, затем dir n* покажет NULL, но не NUL.
Для людей, которые ищут "специальные" файлы Unix под Windows: здесь - это драйверы устройств /dev/random и /dev/zero для Win32.
Обратите внимание, что программе, которая часто выводит на стандартный вывод, потребуется такое же количество времени для завершения, если она будет перенаправлена на NUL, хотя печатать нечего.
@CoDEmanX: Это не мой опыт. Запись в консоль или даже в файл может занять значительное время. Я только что протестировал это с помощью программы, написавшей "Hello there" на стандартный вывод 10000000 раз. Перенаправление в файл (на SSD) заняло 18 секунд. Перенаправление на NUL заняло 4 секунды. Отсутствие перенаправления через некоторое время заставило меня сдаться из-за отсутствия терпения ...
В моем тесте на Windows 7 с обычным жестким диском программа-пример заняла 0,67 секунды для записи в файл, 1,4 секунды для NUL и несколько минут для печати на консоль. Я думаю, это бывает по-разному, и есть несколько влияющих факторов.
Вы также можете использовать C:\Windows\System32\drivers\null.sys.
Еще в Win95 я узнал, что вы должны писать двоеточие после специальных имен устройств, поэтому NUL: (и CON:, PRN:, ...), это в основном вопрос стиля и ясно показывает, что NUL: - это особый объект, а не файл под названием NUL. Кроме того, с помощью специального API можно создать файл с именем NUL (см. Один из ответов). Я мечтаю, что, может быть, однажды, если все будут использовать двоеточие по соглашению, мы сможем отказаться от ужасных имен специальных устройств :-)
Я провел несколько быстрых тестов с LinqPad, и похоже, что NUL не поддерживается Windows ни как имя файла, ни как элемент пути. Я предполагаю, что NUL - это только cmd.exe (следовательно, PowerShell требует вместо этого $ null).
cat foobar 2> $null перенаправляет stderr на null.
Согласно этому сообщение в списке рассылки 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;
}
(Кредиты Дэнни за этот код; скопировано из его сообщения.)
Вы также можете использовать этот специальный "нулевой" файл с помощью перенаправления.
Ах, это объясняет, почему, если вы создаете каталог C:\dev в Windows и используете множество утилит GNU, вы в конечном итоге получите таинственный файл с именем null в этом каталоге.
Джон Скит прав. Вот страница Драйвер устройства Nul в документации Windows Embedded (я понятия не имею, почему это не где-то еще ...).
Вот еще один:
Конечно, Джон Скит прав. Спасибо, что констатировали очевидную и универсальную правду :)
2 ссылки здесь не работают. :(
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-разрядная версия.
Приятно, что на 64-битной Windows 7 невозможно создать файл с именем "nul" :)
@DawidFerenczy это возможно, хотя и не классическим способом. Например. md \\.\c:\nulquora.com/…, gohacking.com/how-to-create-con-folder-in-windows, superuser.com/questions/86999/…
В Windows 10 в bash первый создает файл nul
выбрасывает IOException с использованием java в win10. Просто нужно обернуть его, чтобы попробовать поймать. Надеялся, что не будет никаких исключений / ошибок, как / dev / null
NUL работает и программно. Например. последующий:
freopen("NUL", "w", stderr);
работает, как ожидалось, без создания файла. (MSVC++ 12.0)
Есть очень много раз, когда на вопрос нужно ответить с помощью NUL, и это было уже прошло 5 лет назад.
Я думаю, что этот ответ вносит весомый вклад в обсуждение.
Для этого в Windows PowerShell необходимо использовать Начало и $ NUL:
Введите эту команду, предполагая, что mySum - это имя вашего приложения, а 510 - аргументы командной строки, которые вы отправляете.
start .\mySum 5 10 > $NUL 2>&1
Команда start запустит отдельный процесс, аналогичный эффекту &. Параметр /B предотвращает запуск нового окна терминала, если программа, которую вы запускаете, является консольным приложением. NUL - это Windows-эквивалент /dev/null. 2>&1 в конце перенаправит stderr на stdout, который все перейдет на NUL.
Если вам нужно выполнить в Microsoft Windows эквивалент символической ссылки на /dev/null в Linux, вы должны открыть cmd администратора и ввести:
Для файлов:
mklink c:\path\to\file.ext NUL:
Или для справочников:
mklink /D c:\path\to\dir NUL:
Это сохранит файл / директорию всегда равным 0 байтам, и все равно будет возвращать успех каждой попытке записи.
@ Джим: Интересно - я не знал, что вы можете писать в пути вне / dev / null, как если бы это был каталог. Хм.