如何在LINUX中实现stdin,stderr,stdout?
它们肯定不是物理文件。对于每个进程,它们必须是由OS在RAM中制作的某种临时存储装置。
这些数组数据结构是否分别附加到每个进程?
答案 0 :(得分:5)
stdin,stderr和stdout是文件描述符(或FILE*
包装器,如果你的意思是带有这些名称的C stdio对象)。文件描述符是索引内核中每个进程数据结构的数字。该数据结构记录了进程打开的I / O通道,I / O通道是文件,设备,套接字或管道的临时术语。
按照惯例,表中的第一个条目具有索引0并且称为标准输入,1是标准输出,2是标准错误通道。这只是Unix程序中的惯例;就内核而言,这些数字没有什么特别之处。
每个I / O系统调用(read
,write
等)都会获取一个文件描述符,指示调用应该在哪个通道上运行。