stdin
:一般标准输入,简称stdin
,来自键盘。
stdin
当您输入内容时,您是在(标准输入终端)上输入的。标准输入设备,通常是键盘,但 Linux 也允许您从文件中获取标准输入。
例如:
cat < myfirstscript
这将告诉cat
从文件myfirstscript
而不是从键盘获取输入(这当然与:相同cat myfirstscript
)。
本质上,这可以归结为该命令 ( ) 的输入cat
不再来自预期的位置(键盘),而是来自文件。
我很困惑:它本来应该来自(键盘),但现在来自文件。
当你在键盘上输入一个文件时(比如:)cat myfirstscript
,这不也是一个文件吗?
答案1
通常标准输入(称为“stdin”)来自键盘。
这种情况很少见!例如:当您启动它时,我们的计算机已经运行了几千个进程,这些进程在您输入第一个字母之前从键盘以外的其他地方读取标准输入:)
当您输入内容时,您是在 stdin(标准输入终端)上输入它。
不,您将其输入键盘,内核驱动程序会理解这些输入事件,并将它们转换为按键代码,然后通过伪 tty 将其发送到某个终端仿真器。
该终端仿真器可以选择将其运行的程序的标准输入连接到该 PTTY。
(这当然与:cat myfirstscript 相同)。
但这只是情况,因为cat
这样编写,您传递给它的参数就会被解释为要打开和使用的文件反而标准输入的。
当您这样做时cat < myfirstscript
,您告诉 shell 1. 打开文件myfirstscript
(以获取文件描述符)并 2. 运行cat
,而stdin
流将被打开的文件描述符替换。
因此,虽然效果相同,但机制却截然不同!
本质上,这可以归结为该命令(cat)的输入不再来自预期的来源(键盘),而是来自文件
cat
从未“预期”有关输入流的任何内容;特别是不是它来自键盘(cat
根本无法处理键盘设备。它需要终端将按键转换为人物)。
当您在键盘上键入文件时(例如:cat myfirstscript)。这不是同样的文件吗?
不。