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