0
我试图在unistd.h中使用read
函数实现getchar()
函数。实现getchar与缓冲读取
我知道read(0,buffer,1)
相当于getchar()
,但是,它需要太多的系统调用。
有没有办法使用较少的系统调用来实现getchar()
函数?
我试图在unistd.h中使用read
函数实现getchar()
函数。实现getchar与缓冲读取
我知道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;
}
谢谢您的回复,杰里。但是,如果用户输入少于该缓冲区,该怎么办? – 2013-03-20 01:08:56
@ user2188908:对于用户直接输入东西的交互式流,您通常需要使用行缓冲 - 即读到新行。鉴于交互式输入速度较慢,无论如何,在这种情况下,您通常并不关心速度。 – 2013-03-20 01:11:23