Files

為什麼 /dev/null 是一個文件?為什麼它的功能不作為一個簡單的程序來實現?

  • January 6, 2019

我試圖理解 Linux 上特殊文件的概念。/dev但是,據我所知,當它的功能可以通過 C 中的幾行程式碼來實現時,擁有一個特殊文件似乎很愚蠢。

此外,您可以以幾乎相同的方式使用它,即通過管道輸入null而不是重定向到/dev/null. 將其作為文件有特定原因嗎?將其設為文件不會導致許多其他問題,例如訪問同一文件的程序過多嗎?

除了使用字元特殊設備的性能優勢外,主要優勢是模組化。/dev/null 幾乎可以在任何需要文件的上下文中使用,而不僅僅是在 shell 管道中。考慮接受文件作為命令行參數的程序。

# 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

這些都是使用程序作為源或接收器非常麻煩的情況。即使在 shell 管道的情況下,stdout 和 stderr 也可以獨立地重定向到文件,這對於作為接收器的執行檔來說是很難做到的:

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

引用自:https://unix.stackexchange.com/questions/438130