GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi /dev/null est-il un fichier ? Pourquoi sa fonction n'est-elle pas implémentée comme un programme simple ?

J'essaie de comprendre le concept de fichiers spéciaux sous Linux. Cependant, avoir un fichier spécial dans /dev semble tout simplement idiot alors que sa fonction pourrait être implémentée par une poignée de lignes en C à ma connaissance.

De plus, vous pouvez l'utiliser à peu près de la même manière, c'est-à-dire en passant par null au lieu de rediriger vers /dev/null . Y a-t-il une raison spécifique pour l'avoir comme fichier ? Le fait d'en faire un fichier ne cause-t-il pas de nombreux autres problèmes, comme trop de programmes accédant au même fichier ?

Réponse acceptée :

Outre les avantages en termes de performances de l'utilisation d'un appareil spécial personnage, le principal avantage est la modularité . /dev/null peut être utilisé dans presque tous les contextes où un fichier est attendu, pas seulement dans les pipelines shell. Considérez les programmes qui acceptent les fichiers comme paramètres de ligne de commande.

# We don't care about log output.
$ frobify --log-file=/dev/null

# We are not interested in the compiled binary, just seeing if there are errors.
$ gcc foo.c -o /dev/null  || echo "foo.c does not compile!".

# Easy way to force an empty list of exceptions.
$ start_firewall --exception_list=/dev/null

Ce sont tous des cas où l'utilisation d'un programme comme source ou puits serait extrêmement lourde. Même dans le cas du pipeline shell, stdout et stderr peuvent être redirigés vers des fichiers indépendamment, ce qui est difficile à faire avec des exécutables comme récepteurs :

# Suppress errors, but print output.
$ grep foo * 2>/dev/null

Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Quand utiliser /dev/random contre /dev/urandom ?

  3. Comment désactiver complètement un Cronjob vers /dev/null/?

  4. Pourquoi la redirection de Stderr vers /dev/null se fait-elle de cette façon ?

  5. Comment encoder en base64 /dev/random ou /dev/urandom ?

/dev/null sous Linux

Que sont les fichiers /dev/zero et /dev/null sous Linux

Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

/dev/sdb :aucun fichier ou répertoire de ce type (mais /dev/sdb1, etc. existe)

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

Créer un périphérique de bloc virtuel qui écrit dans /dev/null