unistd.h のgetchar()
関数を使用して関数を実装しようとしていました。read
read(0,buffer,1)
が と同等であることはわかっgetchar()
ていますが、システム コールが多すぎます。
getchar()
より少ないシステムコールを使用して関数を実装する方法はありますか?
unistd.h のgetchar()
関数を使用して関数を実装しようとしていました。read
read(0,buffer,1)
が と同等であることはわかっgetchar()
ていますが、システム コールが多すぎます。
getchar()
より少ないシステムコールを使用して関数を実装する方法はありますか?
はい -- データでいっぱいのより大きなバッファ (たとえば、少なくとも数キロバイト) を読み取ります。ユーザーが getchar を呼び出すと、バッファが空でない限り、バッファから char を返します。空の場合は、最初にバッファを補充してから、char を返します。
の簡単な実装を次に示します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;
}