Linuxでの特殊ファイルの概念を理解しようとしています。しかし、/dev
私の知る限り、Cのいくつかの行でその機能を実装できる場合、特別なファイルを持っているのはばかげているように見えます。
さらに、ほぼ同じ方法で使用することもできます。つまりnull
、にリダイレクトする代わりにパイピングし/dev/null
ます。ファイルとして持つ特定の理由はありますか?同じファイルにアクセスするプログラムが多すぎるなど、他の多くの問題をファイルにしないのですか?
grep blablubb file.txt 2>/dev/null && dosomething
nullがプログラムまたは関数であると機能しませんでした。
read
関数の本体は/dev/null
「return 0」で構成されます(つまり、何も行わず、EOFが発生することを意味します):(静的github.com/torvalds/linux/blob/master/からdrivers / char / mem.c)ssize_t read_null(struct file *file, char __user *buf, size_t count, loff_t *ppos) { return 0; }
(ああ、@ JdeBPがすでにその点を指摘しているのを見るだけです。とにかく、ここにイラストがあります:-)。
cat foo | bar
大部分も、なぜ(スケールで)がはるかに悪いのかですbar <foo
。cat
些細なプログラムですが、些細なプログラムでもコストが発生します(FIFOのセマンティクスに固有のものもあります。seek()
たとえば、プログラムはFIFO内に配置できないためです。パイプラインが与えられた場合、/dev/null
それらの操作を偽装できるキャラクターデバイスを使用するか、実際のファイルを使用してそれらを実装できますが、FIFOはコンテキストを意識した処理を一切許可しません)。