代码之家  ›  专栏  ›  技术社区  ›  KawaiKx

stdin、stdout和stderr究竟是如何在linux中实现的?

  •  6
  • KawaiKx  · 技术社区  · 11 年前

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

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

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

    1 回复  |  直到 11 年前
        1
  •  5
  •   Fred Foo    11 年前

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

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

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