2

/dev/null在 bash 编程中使用了很多东西来将不必要的输出发送到黑洞中。

例如,这个命令:

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

不会echo有什么。我读过这/dev/null是一个空文件,用于通过重定向处理不需要的输出。但这种处置究竟是如何进行的呢?我无法想象/dev/null将内容写入文件然后立即删除该文件。那么当你重定向到这个文件时实际发生了什么?

4

1 回答 1

5

>/dev/null将命令标准输出重定向到空设备,这是一个丢弃写入它的信息的特殊设备。这一切都是通过 file_operations 实现的(drivers/char/mem.c如果你想看看自己的话):

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;
}

就是这样。缓冲区只是被忽略。

于 2017-06-18T09:18:47.913 回答