0

unistd.h のgetchar()関数を使用して関数を実装しようとしていました。read

read(0,buffer,1)が と同等であることはわかっgetchar()ていますが、システム コールが多すぎます。

getchar()より少ないシステムコールを使用して関数を実装する方法はありますか?

4

2 に答える 2

0

はい -- データでいっぱいのより大きなバッファ (たとえば、少なくとも数キロバイト) を読み取ります。ユーザーが getchar を呼び出すと、バッファが空でない限り、バッファから char を返します。空の場合は、最初にバッファを補充してから、char を返します。

于 2013-03-20T01:07:38.907 に答える
0

の簡単な実装を次に示します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;
}
于 2015-10-09T01:35:01.507 に答える