我试图getchar()
使用 unistd.h 中的函数来实现函数read
。
我知道read(0,buffer,1)
相当于getchar()
,但是,它需要太多的系统调用。
有没有办法getchar()
使用更少的系统调用来实现功能?
我试图getchar()
使用 unistd.h 中的函数来实现函数read
。
我知道read(0,buffer,1)
相当于getchar()
,但是,它需要太多的系统调用。
有没有办法getchar()
使用更少的系统调用来实现功能?
是的——读取一个更大的缓冲区(例如,至少几千字节),里面装满了数据。当用户调用 getchar 时,从缓冲区返回一个字符,除非它是空的。如果为空,则先重新填充缓冲区,然后返回一个字符。
这是一个简单的实现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;
}