Existe-t-il un / dev / null sous Windows?

414

Quel est l'équivalent de /dev/nullsous Windows?

Ove S
la source

Réponses:

489

Je pense que vous voulez NUL, au moins dans une invite de commande ou des fichiers batch.

Par exemple:

type c:\autoexec.bat > NUL

ne crée pas de fichier.

(Je crois que la même chose est vraie si vous essayez de créer un fichier par programme, mais je ne l'ai pas essayé.)

Dans PowerShell, vous voulez $null:

echo 1 > $null
Jon Skeet
la source
20
@capthive: il y a une différence entre /dev/null.txt et /dev/null/foo.txt.
Jon Skeet
2
Je viens de revoir cela et je retire ma déclaration d'origine. Je faisais l'écriture dans le code et l'erreur devenait avalée. Je le supprime donc personne ne le prend accidentellement comme la vérité.
Jim Hunziker du
3
Pour les personnes à la recherche d'Unix fichiers « spéciaux » sous Windows: ici sont /dev/randomet /dev/zeropilotes de périphériques pour Win32.
ulidtko
9
@CoDEmanX: Ce n'est pas mon expérience. L'écriture sur la console - ou même un fichier - peut prendre un temps considérable. Je viens de le tester avec un programme écrivant "Hello there" à stdout 10000000 fois. La redirection vers un fichier (sur un SSD) a pris 18 secondes. La redirection vers NUL a pris 4 secondes. Ne pas rediriger du tout m'a fait abandonner par manque de patience après un certain temps ...
Jon Skeet
2
J'ai appris dans Win95 fois que vous devriez écrire deux points après des noms de périphériques spéciaux, donc NUL:(et CON:,, PRN:...), C'est principalement une question de style et montre clairement qu'il NUL:s'agit d'un objet spécial et non d'un fichier appelé NUL. De plus, il est possible avec une API spéciale de créer un fichier appelé NUL(voir une des réponses). Je rêve qu'un jour, si tout le monde utilise les deux-points par convention, nous pourrons déprécier les noms d'appareil spéciaux tant redoutés :-)
jdm
65

Selon ce message sur la liste de diffusion GCC , vous pouvez utiliser le fichier "nul" au lieu de / 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;
}

(Crédits à Danny pour ce code; copié-collé de son message.)

Vous pouvez également utiliser ce fichier spécial "nul" par redirection.

strager
la source
1
Ah, cela explique pourquoi, si vous créez un C:\devrépertoire dans Windows et que vous utilisez beaucoup d'utilitaires GNU, vous finirez par acquérir un mystérieux fichier appelé null dans ce répertoire.
Klitos Kyriacou
50

NULdans Windows semble être en fait un chemin virtuel dans n'importe quel dossier. Tout comme .., .dans un système de fichiers.

Utiliser n'importe quel dossier suivi de NUL fonctionnera.

Exemple,

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

avoir le même effet que /dev/nullsur Linux.

Cela a été testé sur Windows 7, 64 bits.

Jerry
la source
7
Bien, il n'est pas possible de créer un fichier nommé "nul" sur Windows 7 64 bits :)
David Ferenczy Rogožan
7
@DawidFerenczy c'est possible, mais pas de façon classique. Par exemple md \\.\c:\nul quora.com/… , gohacking.com/how-to-create-con-folder-in-windows , superuser.com/questions/86999/…
phuclv
1
Sur Windows 10 en bash, le premier crée un fichiernul
DrumM
lève IOException en utilisant java dans win10. Juste besoin de l'envelopper sur try catch.
Espérait
34

Jon Skeet a raison. Voici la page Nul Device Driver dans la documentation Windows Embedded (je n'ai aucune idée pourquoi ce n'est pas ailleurs ...).

En voici un autre:

Foredecker
la source
69
Bien sûr, Jon Skeet a raison. Merci d'avoir énoncé une vérité évidente et universelle :)
R. Martinho Fernandes
1
2 des liens ici sont maintenant rompus. :(
Michael Foukarakis
9

NULfonctionne également par programme. Par exemple:

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

fonctionne comme prévu sans créer de fichier. (MSVC ++ 12.0)

ava
la source
1
Il n'y a que tant de fois qu'il faut répondre à la question NUL, et c'était déjà le cas il y a 5 ans.
miken32
6
Je pense que cette réponse ajoute une contribution valable à la discussion.
Jeroen
3

Si vous devez effectuer dans Microsoft Windows l'équivalent d'un lien symbolique vers /dev/nullLinux, vous devez l'ouvrir et l'administrateur cmdet taper:

Pour les fichiers:

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

Ou, pour les répertoires:

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

Cela gardera le fichier / direcotry toujours à 0 octet et retournera toujours le succès à chaque tentative d'écriture.

Marco
la source
-1

Vous devez utiliser start et $ NUL pour cela dans Windows PowerShell :

Tapez cette commande en supposant que mySumc'est le nom de votre application et que ce 5 10sont les arguments de ligne de commande que vous envoyez.

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

La startcommande lancera un processus détaché, un effet similaire à &. L' /Boption empêche le démarrage d'ouvrir une nouvelle fenêtre de terminal si le programme que vous exécutez est une application console. et NULest l'équivalent de Windows pour /dev/null. À 2>&1la fin, redirigera stderr vers stdout, qui ira tous vers NUL.

HaSeeB MiR
la source
pourquoi le downvote? veuillez expliquer
HaSeeB MiR