我试图在unistd.h中使用getchar()
函数实现read
函数。
我知道read(0,buffer,1)
等同于getchar()
,但系统调用过多。
有没有办法使用较少的系统调用来实现getchar()
函数?
答案 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;
}