Я пытался реализовать функцию getchar(), используя read() в unistd.h.Реализация getchar с чтением
Поскольку системные вызовы являются дорогостоящими, я хотел как можно меньше выполнять функции read().
Если я использую «getchar», он отлично работает. Однако в этом случае «мегаджет» не работает.
Может ли кто-нибудь указать, что я сделал неправильно ниже?
#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;
}
Вам также нужно сделать «буфер» глобальным. В противном случае вы читаете и отбрасываете до 1023 символа на каждый вызов для чтения, а последующие вызовы на возврат мусора 'mygetchar'. – Anthony