c - getchar() 是如何实现的?

标签 c stdio

我只是想知道如何 getchar() 实现了吗?是不是像下面这样?以这种方式读取单字节效率非常低。它是否使用一些缓冲?

伪代码:

int getchar() {

    char buf[1];
    int n = read(0, buf, 1);

    if(n < 1)
        printf("Read failed");

    return buf[0];
}

最佳答案

这是一个非常简单的实现。

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;
}

关于c - getchar() 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9544151/

相关文章:

go - 两次写入同一个子进程golang

c - 如何确定使用 fgets() 读取的字符数?

C - 用户输入被跳过?

java - 是否可以使用 SWIG 生成的 JNI 从 C 代码调用 java 方法?

c++ - fscanf 与 ifstream 速度

ruby - $defer、$default 的目的是什么,为什么没有 $defined

c - 算法 |给定一个数组 [] 和 k,找到子集数和 k 的倍数

c - 在有限的 16 字节字符串上将 IEEE 754-1985 双倍写入 ASCII

c - 在 C 中, block 作用域变量存储在哪里?

c - 使用 setvbuf() 禁用标准输入和标准输出的缓冲