STDIN, STDOUT, STDERR

三个标准文件 Unix/Linux/BSD 都有三个特别文件: 文件 设备路径 说明 shell 里的代号(fd) 标准输入 STDIN /dev/stdin 一般指键盘输入 0 标准输出 STDOUT /dev/stdout 一般指终端(显示器) 1 标准错误 STDERR /dev/stderr 也指终端,专门用来发送错误信息 2 stdin 与文件描述符表、pty、键盘的关系 stdin 不是一个独立的东西,它是文件描述符表(file descriptor table,每个进程私有)里 fd 0 这个槽位的习惯叫法。fd 0 具体指向什么取决于进程是怎么启动的——可能重定向到文件、接在管道后面,也可能像交互式 shell 一样连到终端。 在交互式终端场景下,从键盘到 stdin 的完整链路是: 键盘硬件 │ 内核输入子系统 (evdev) ▼ 终端模拟器进程 / SSH 客户端-服务端 <- 用户态进程,把按键翻译成字符 │ write() 进 /dev/ptmx(pty master 端) ▼ 内核 pty 子系统转发 master -> slave ▼ /dev/pts/N(pty slave,字符设备,内核模拟出来的) ▼ shell 进程的 fd 0(即 stdin)read() 读到这些字节 要点: ...

Created 19196-11-19 · Updated 26266-07-26 · 2 min · 394 words · -