我试图在unistd.h中使用read()来实现getchar()函数。实现getchar与读取
由于系统调用很昂贵,我希望尽可能少执行read()函数。
如果我使用“getchar”,它工作正常。但是,在这种情况下,“mygetchar”不起作用。
任何人都可以指出我在下面做错了什么?
#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 1024
int startIndex;
int endIndex;
int mygetchar(void){
char buffer[BUF_SIZE];
startIndex=0;
endIndex=0;
if(startIndex == endIndex){
int r;
r = read(0,buffer,BUF_SIZE);
startIndex=0;
endIndex=r;
}
return buffer[startIndex++];
}
int main(){
char c;
int i=0;
do{
c = mygetchar();
putchar(c);
i++;
}
while(c != EOF);
return 0;
}
你需要使'buffer'成为全局的。否则,您正在读取并丢弃每个读取调用最多1023个字符,并且后续调用'mygetchar'会返回垃圾。 – Anthony 2013-03-20 02:15:37