GNU/Linux >> Linux Esercitazione >  >> Linux

Perché /dev/null è un file? Perché la sua funzione non è implementata come un semplice programma?

Sto cercando di capire il concetto di file speciali su Linux. Tuttavia, avere un file speciale in /dev sembra semplicemente sciocco quando la sua funzione potrebbe essere implementata da una manciata di righe in C per quanto ne so.

Inoltre potresti usarlo più o meno allo stesso modo, ad es. piping in null invece di reindirizzare a /dev/null . C'è un motivo specifico per averlo come file? Renderlo un file non causa molti altri problemi come troppi programmi che accedono allo stesso file?

Risposta accettata:

Oltre ai vantaggi in termini di prestazioni derivanti dall'utilizzo di un dispositivo speciale per caratteri, il vantaggio principale è la modularità . /dev/null può essere utilizzato in quasi tutti i contesti in cui è previsto un file, non solo nelle pipeline di shell. Considera i programmi che accettano file come parametri della riga di comando.

# 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

Questi sono tutti casi in cui l'utilizzo di un programma come sorgente o sink sarebbe estremamente ingombrante. Anche nel caso della pipeline di shell, stdout e stderr possono essere reindirizzati ai file in modo indipendente, cosa difficile da fare con eseguibili come sink:

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

Linux
  1. >&- è più efficiente di>/dev/null?

  2. Come silenziare completamente un Cronjob in /dev/null/?

  3. Perché il reindirizzamento di Stderr a /dev/null viene eseguito in questo modo?

  4. Cosa sono i file /dev/zero e /dev/null in Linux

  5. Come eseguire il file sh da un altro file sh

Quanto sono portatili /dev/stdin, /dev/stdout e /dev/stderr?

Quando usare /dev/random vs /dev/urandom?

/dev/null in Linux

Come codificare in base64 /dev/random o /dev/urandom?

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Perché sono necessari < o > per usare /dev/tcp