我只是想知道getchar()
是如何实现的?它是否像以下那样?以这种方式读取单字节是非常低效的。它是否使用缓冲?
伪码:
int getchar() {
char buf[1];
int n = read(0, buf, 1);
if(n < 1)
printf("Read failed");
return buf[0];
}
答案 0 :(得分:2)
考虑到标准C库的实现数量,不可能提供明确的答案,但最常见的答案似乎遵循相同的一般准则。
根据定义,getchar()
使用标准C库的流基础结构,即FILE
及其友好功能。在大多数现代C库实现中,文件流缓冲到一定程度,缓冲区大小和行为通常可通过setvbuf()
进行调整。
我知道至少有一种情况(glibc),其中文件可以选择 - 通过fopen()
的额外选项 - 通过内存映射(即mmap()
)而不是{ {1}} / read()
。为避免与调用更高级别函数(例如write()
)混合时出现问题,scanf()
强制使用相同的缓冲结构。
如果没有来自分析器的信息,我会更担心使用getchar()
的任何代码的结构复杂性,而不是使用它导致的任何性能问题。
答案 1 :(得分:1)
这是一个非常简单的实现。
variableValue