GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist /dev/null eine Datei? Warum ist seine Funktion nicht als einfaches Programm implementiert?

Ich versuche, das Konzept spezieller Dateien unter Linux zu verstehen. Allerdings mit einer speziellen Datei in /dev scheint einfach albern, wenn seine Funktion meines Wissens durch eine Handvoll Zeilen in C implementiert werden könnte.

Außerdem könnten Sie es auf ziemlich dieselbe Weise verwenden, d. h. in null leiten anstatt nach /dev/null umzuleiten . Gibt es einen bestimmten Grund dafür, es als Datei zu haben? Verursacht das Erstellen einer Datei nicht viele andere Probleme, z. B. zu viele Programme, die auf dieselbe Datei zugreifen?

Akzeptierte Antwort:

Neben den Leistungsvorteilen bei der Verwendung eines charakterspezifischen Geräts ist der Hauptvorteil die Modularität . /dev/null kann in fast jedem Kontext verwendet werden, in dem eine Datei erwartet wird, nicht nur in Shell-Pipelines. Betrachten Sie Programme, die Dateien als Befehlszeilenparameter akzeptieren.

# 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

Dies sind alles Fälle, in denen die Verwendung eines Programms als Quelle oder Senke äußerst umständlich wäre. Sogar im Fall der Shell-Pipeline können stdout und stderr unabhängig voneinander auf Dateien umgeleitet werden, was mit ausführbaren Dateien als Senken schwierig ist:

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

Linux
  1. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  2. Was sind /dev/zero- und /dev/null-Dateien in Linux

  3. Wie kann /dev/random oder /dev/urandom mit base64 codiert werden?

  4. DD von /dev/zero nach /dev/null ... was eigentlich passiert

  5. Erstellen Sie ein virtuelles Blockgerät, das in /dev/null schreibt

Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

Wie portabel sind /dev/stdin, /dev/stdout und /dev/stderr?

Wann sollte /dev/random vs. /dev/urandom verwendet werden?

Wie man einen Cronjob komplett zum Schweigen bringt /dev/null/?

Warum wird Stderr auf diese Weise nach /dev/null umgeleitet?

/dev/null unter Linux