STDOUT 缓冲区在哪里?

Dag*_*ang 5 c linux

众所周知,STDOUT 是在 Linux 中缓冲的。我的问题是:1)它是所有进程共享的全局缓冲区吗?还是每个进程一个缓冲区?2)缓冲区在哪里?在堆栈,堆或静态区域?3)谁创造的?

Ker*_* SB 3

stdout是由标准库创建的 CFILE指针,因此相关代码将作为 C 库的一部分加载。在 Linux 上,它将根据 Posix 文件描述符来实现。

您的 C 库和内核都可能使用缓冲;您必须检查各个文件。我建议首先查看C库源代码的相关部分(即实现的部分<stdio.h>),这应该很有教育意义。