我只是想知道getchar()是如何实现的?是像下面这样的吗?用这种方式读取是非常低的,单字节。它需要缓冲吗?
伪码:
int getchar() {
char buf[1];
int n = read(0, buf, 1);
if(n < 1)
printf("Read failed");
return buf[0];
}发布于 2015-10-09 01:10:44
下面是一个非常简单的实现。
int mygetchar(void)
{
static char buf[BUFSIZ];
static char *bufp = buf;
static int i = 0;
if (i == 0)
{
i = read(0, buf, 1);
bufp = buf;
}
if ( --i >= 0 )
{
return *bufp++;
}
return EOF;
}发布于 2012-03-03 08:47:51
考虑到标准C库的实现数量,不可能提供明确的答案,但最常见的实现似乎遵循相同的一般准则。
根据定义,getchar()使用标准C库的流基础结构,即FILE及其友好功能。在大多数现代C库实现中,文件流在一定程度上被缓冲,缓冲区大小和行为通常可以通过setvbuf()进行调整。
我知道至少有一种情况(滑翔),即可以选择--通过fopen()的一个额外选项--通过内存映射(即mmap())访问文件,而不是read()/write()。为了避免在调用更高级别的函数(如scanf() )时出现问题,getchar()被迫使用相同的缓冲结构。
如果没有分析器的信息,我更担心任何使用getchar()的代码的结构复杂性,而不是它的使用所造成的任何性能问题。
https://stackoverflow.com/questions/9544151
复制相似问题