我試圖在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