Estoy tratando de entender el concepto de archivos especiales en Linux. Sin embargo, tener un archivo especial en /dev
parece simplemente tonto cuando su función podría implementarse con un puñado de líneas en C que yo sepa.
Además, podría usarlo prácticamente de la misma manera, es decir, canalizarlo a null
en lugar de redirigir a /dev/null
. ¿Hay alguna razón específica para tenerlo como un archivo? ¿Convertirlo en un archivo no causa muchos otros problemas, como demasiados programas que acceden al mismo archivo?
Respuesta aceptada:
Además de los beneficios de rendimiento de usar un dispositivo especial para personajes, el beneficio principal es la modularidad . /dev/null se puede usar en casi cualquier contexto donde se espera un archivo, no solo en las canalizaciones de shell. Considere los programas que aceptan archivos como parámetros de línea de comandos.
# 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
Todos estos son casos en los que usar un programa como fuente o sumidero sería extremadamente engorroso. Incluso en el caso de la canalización de shell, stdout y stderr pueden redirigirse a archivos de forma independiente, algo que es difícil de hacer con ejecutables como sumideros:
# Suppress errors, but print output.
$ grep foo * 2>/dev/null