【问题标题】:How exactly stdin, stdout, stderr are implemented in linux?linux中究竟是如何实现stdin、stdout、stderr的?
【发布时间】:2013-10-27 10:57:24
【问题描述】:

在 LINUX 中,stdin、stderr、stdout 究竟是如何实现的?

它们当然不是物理文件。它们必须是操作系统为每个进程在 RAM 中进行的某种临时存储安排。

这些数组数据结构是否分别附加到每个进程?

【问题讨论】:

  • 我已阅读该帖子。如果 stdin、stdout、stderr 是数组数据结构或不是,它没有提到任何地方。我对它们并不感到困惑。我只是想知道它们是如何实际实现的..

标签: linux unix stdout stdin stderr


【解决方案1】:

stdin、stderr 和 stdout 是文件描述符(或 FILE* 包装它们,如果您指的是带有这些名称的 C stdio 对象)。文件描述符是索引内核中每个进程数据结构的数字。该数据结构记录了进程打开了哪些 I/O 通道,I/O 通道是我对文件、设备、套接字或管道的特设术语。

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

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

【讨论】:

  • I/O 通道是如何实现的?
  • @Saurabh:以各种方式构成了大量内核源代码。阅读它们以找出答案,或拿起一本书,如UNIX 操作系统的设计(巴赫)或4.3BSD UNIX 操作系统的设计与实现(McKusick 等人)等)。这些描述了 Unix 内部如何工作,Linux 非常相似。
猜你喜欢
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 2017-07-14
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多