在Linux中,stdin、stdout和stderr是如何实现的?

6

stdin、stderr和stdout在Linux中是如何实现的?它们肯定不是物理文件。它们必须是由操作系统针对每个进程在RAM中创建的某种临时存储安排。

这些数据结构数组是否单独附加到每个进程上?


可能是困惑于stdin、stdout和stderr?的重复问题。 - user1864610
2
我已经阅读了那篇文章。它没有提到stdin、stdout、stderr是否是数组数据结构。我并不困惑于它们,我只是想知道它们实际上是如何实现的。 - KawaiKx
1个回答

5
stdin、stderr和stdout是文件描述符(或者如果你指的是C stdio对象使用这些名称,则为FILE*包装器)。文件描述符是一个索引进程内核中的每个进程数据结构的数字。该数据结构记录了进程打开的I/O通道,I/O通道是我自己定义的术语,指文件、设备、套接字或管道。

按照惯例,表格中的第一个条目具有索引0,并称为标准输入,1是标准输出,2是标准错误通道。这只是Unix程序中的一种约定,就内核而言,这些数字并没有什么特别之处。

每个I/O系统调用(如readwrite等)都需要一个文件描述符,以指示调用应在哪个通道上进行操作。


I/O通道是如何实现的? - KawaiKx
@Saurabh:有许多方式可以涵盖内核源代码的大部分内容。阅读它们以了解详情,或者选择像《UNIX操作系统设计》(Bach)或《4.3BSD UNIX操作系统的设计与实现》(McKusick等人)这样的书籍。它们描述了Unix的内部工作原理,而Linux非常相似。 - Fred Foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接