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

Posted: 2013年09月12日

前回は、ファイル読み込みバッファ表示処理です。
今回は、ファイル読み処理です。

misc.c maparound関数

プログラムプログラム:

/*
 * Move the map window so that it contains the byte at absolute file
 * offset `offset'. The start of the map window will be TAILMAPLEN
 * aligned.
 */
int
maparound(struct mapinfo *mip, off_t offset)
{

    if (mip->start != NULL && munmap(mip->start, mip->maplen) != 0)
        return (1);

    mip->mapoff = offset & ~((off_t)TAILMAPLEN - 1);
    mip->maplen = TAILMAPLEN;
    if ((off_t)mip->maplen > mip->maxoff - mip->mapoff)
        mip->maplen = mip->maxoff - mip->mapoff;
    if (mip->maplen <= 0)
        abort();
    if ((mip->start = mmap(NULL, mip->maplen, PROT_READ, MAP_SHARED,
         mip->fd, mip->mapoff)) == MAP_FAILED)
        return (1);

    return (0);
}

解説解説:

関数名から分かるとおり
バッファは、mmapにて両一気を確保し且つ読み込みます。

前回の情報がある場合はmumapにて解放処理を行います。

あとは、指定位置と指定サイズ、ファイルポインタをmmapに
設定することでファイルを読み込んでいます。

これでtailの全てを紹介してきました。
lsよりも短くあっという間に終わってしまいましたが。

次回はどうするかはお楽しみ
これから考えます。

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

コメント