0

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

我知道read(0,buffer,1)相当于getchar(),但是,它需要太多的系统调用。

有没有办法getchar()使用更少的系统调用来实现功能?

4

2 回答 2

0

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

于 2013-03-20T01:07:38.907 回答
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;
}
于 2015-10-09T01:35:01.507 回答