C言語入門(55) 実際にプログラムを読んで理解を深めよう tail編(10)

Posted: 2013年08月30日

前回は、逆読みモードの行読み込み処理です。
今回は、ファイル読み込み時のバッファ表示処理です。

misc.c mapprint関数

プログラムプログラム:

/*
 * Print `len' bytes from the file associated with `mip', starting at
 * absolute file offset `startoff'. May move map window.
 */
int
mapprint(struct mapinfo *mip, off_t startoff, off_t len)
{
    int n;

    while (len > 0) {
        if (startoff < mip->mapoff || startoff >= mip->mapoff +
            (off_t)mip->maplen) {
            if (maparound(mip, startoff) != 0)
                return (1);
        }
        n = (mip->mapoff + mip->maplen) - startoff;
        if (n > len)
            n = len;
        WR(mip->start + (startoff - mip->mapoff), n);
        startoff += n;
        len -= n;
    }
    return (0);
}

解説解説:

この関数は、引数にバッファ情報、表示オフセット、表示サイズが渡されます。

オフセット位置から表示サイズ分バッファデータを表示します。
バッファーデータが表示サイズよりも小さい場合は、

maparound関数にて
別のバッファ領域を取得します。

その繰り返しを行い表示を行います。

カテゴリー: プログラム, 入門 | タグ: , , | コメント無し »

コメント