我试图理解Linux上特殊文件的概念。但是,据/dev
我所知,当可以用C中的几行代码实现其功能时,在其中包含特殊文件似乎很愚蠢。
此外,您可以以几乎相同的方式使用它,即,通过管道连接到,null
而不是重定向到/dev/null
。将其作为文件有特定的原因吗?使其不成为文件会导致许多其他问题,例如太多程序正在访问同一文件吗?
grep blablubb file.txt 2>/dev/null && dosomething
不能将null用作程序或函数。
read
for 的函数主体/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不允许进行任何类型的上下文感知处理。