用缓冲读取实现getchar

时间:2013-03-20 01:04:56

标签: c

我试图在unistd.h中使用getchar()函数实现read函数。

我知道read(0,buffer,1)等同于getchar(),但系统调用过多。

有没有办法使用较少的系统调用来实现getchar()函数?

2 个答案:

答案 0 :(得分:0)

是 - 读取一个充满数据的较大缓冲区(例如,至少几千字节)。当用户调用getchar时,从缓冲区返回一个char,除非它是空的。如果为空,请先重新填充缓冲区,然后返回一个字符。

答案 1 :(得分:0)

以下是getchar()的简单实现:

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