Comment> / dev / null mange-t-il les stream de sortie?

J’ai beaucoup utilisé /dev/null en programmation bash pour envoyer des sorties inutiles dans un trou noir.

Par exemple, cette commande:

 $ echo 'foo bar' > /dev/null $ 

Ne fera pas echo rien. J’ai lu que /dev/null est un fichier vide utilisé pour éliminer les sorties indésirables via la redirection. Mais comment se passe cette élimination? Je ne peux pas imaginer /dev/null écrire le contenu dans un fichier et ensuite supprimer immédiatement ce fichier. Alors, que se passe-t-il réellement lorsque vous redirigez vers ce fichier?

>/dev/null redirige la sortie standard de la commande vers le périphérique null, qui est un périphérique spécial qui ignore les informations qui lui sont écrites. Tout est implémenté via File_operations ( drivers/char/mem.c si vous êtes curieux de vous regarder):

 static const struct file_operations null_fops = { .llseek = null_lseek, .read = read_null, .write = write_null, .splice_write = splice_write_null, }; 

write_null est ce que l’on appelle quand vous écrivez dans / dev / null. Il renvoie toujours le même nombre d’octets que vous lui écrivez:

 static ssize_t write_null(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { return count; } 

C’est tout. Le tampon est simplement ignoré.