2017-06-18 10 views
2

私は、ブラックホールに不必要な出力を送るために、bashプログラミングでは多くを/dev/nullと使いました。>/dev/nullはどのように出力ストリームを消費しますか?

たとえば、次のコマンド:

$ echo 'foo bar' > /dev/null 
$ 

うではないechoもの。私は、/dev/nullが、リダイレクトによって不要な出力を処理するために使用される空のファイルであると読んでいます。しかし、この処分はどのくらい正確に行われますか?私は/dev/nullの内容をファイルに書き込んだり、すぐにそのファイルを削除したとは思いません。では、このファイルにリダイレクトするとどうなりますか?

+0

コンピュータのブラックホールがそれを食べる。これは私の同僚が私に言ったことです;-) – Jimbot

+1

'/ dev/null'は実ファイルではありません。それは、それに書き込まれたすべてのデータを単純に破棄する疑似ファイルデバイスです。 – Leon

答えて

4

>/dev/nullは、コマンド標準出力をnullデバイスにリダイレクトします。ヌルデバイスは、書き込まれた情報を破棄する特別なデバイスです。 (自分で見て興味があればdrivers/char/mem.c)これは、すべてのfile_operationsを経て実現しています :

static const struct file_operations null_fops = { 
    .llseek  = null_lseek, 
    .read  = read_null, 
    .write  = write_null, 
    .splice_write = splice_write_null, 
}; 

write_nullはあなたを/ dev/nullへの書き込み時に呼ばれるものです。これは常に、書き込むバイト数と同じバイト数を返します。

static ssize_t write_null(struct file *file, const char __user *buf, 
       size_t count, loff_t *ppos) 
{ 
    return count; 
} 

それだけです。バッファは無視されます。

+0

実際に '/ dev/null'は、どのような操作に関わってこの機能を起動するデバイスへのシンボリックリンクですか? –

+1

いいえ、/ dev/null自体がデバイスファイル – tso

+0

です。ありがとう、ありがとう。これは啓発だった。 –

関連する問題