要弄清什么是标准输入输出。首先须要弄懂什么是IO。
IO的I是Input的意思,O是output的意思。
意味着输入和输出。
更确切的含义是
I:从外部设备输入到内存
O:从内存输出到外部设备linux
而标准输入和标准输出是干什么的?它们是用于IO的。
那么它们属于IO的哪一个部分?
内存?仍是外部设备?
答案显然是外部设备(逻辑上的外部设备,为何?接着看)。操作系统
更具体的含义?
在linux操做系统中,外部设备用什么表示?是用文件。
linux中一切设备皆是文件!
所以标准输入和输出更具体的含义是文件。内存
它们是哪两个文件?
它们是/dev/stdin这个文件和/dev/stdout这个文件。
也就是说所谓的标准输入和标准输出其实就是两个linux下的文件。原理
linux的文件类型有:
一、普通文件二、字符设备文件三、块设备文四、目录文件
五、连接文件六、管道文件七、套接字文件
思考一下?它们是什么文件?它们在/dev目录下,它们是设备文件吗?重定向
那么所谓的从标准输入读是什么意思?
逻辑上来看:
就是打开/dev/stdin这个文件,而后把这个文件里的内容读进来。
输出到标准输出是什么意思?
逻辑上来看:
就是打开/dev/stdout这个文件,而后把内容输出到这个文件里去。di
为何是从逻辑上来看?由于它们不是设备文件!!!
因此它们不表明一个设备。linux里一切皆是文件,设备是文件,可是文件不必定是设备!
那它们是什么文件?他们是连接文件。(能够用ls -l /dev来查看 l开头的就是连接文件。)
什么是连接文件?文件内容是另外一个文件的地址的文件称为连接文件。
所以,打开、读或者写 /dev/stdin和/dev/stdout 其实是打开、读或者写这两个文件存放的地址对应的设备文件。文件
明白它们是连接文件不是设备文件有什么用?
明白这一点才能知道重定向失效的原理。这个下一篇文章再讲!思考