标准输入输出

Unix系统为每个进程默认打开三个标准I/O文件,它们是进程与外部世界通信的默认通道。

三个标准流

  • 标准输入(stdin,描述符0):默认从键盘读取输入。程序通过 scanfread(0,...) 等函数读取。
  • 标准输出(stdout,描述符1):默认向显示器输出数据。程序通过 printfwrite(1,...) 等函数写入。
  • 标准错误(stderr,描述符2):默认向显示器输出错误信息。与stdout分开以便于错误和正常输出的独立重定向。

I/O重定向的底层实现

  • Shell在创建进程后、执行程序前,通过 dup2 系统调用重定向描述符。
  • 例如,ls > output.txt 的实现是将描述符1重定向到 output.txt 文件。
  • 程序的视角不变(仍然向描述符1写),但内核将数据写到了文件而非屏幕。

标准流的关闭

  • exit 函数会关闭所有打开的标准流并刷新缓冲区。
  • _exit 调用中,I/O缓冲区不会被刷新。

链接到