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

Posted: 2013年08月08日

前回は、通常モード(foward)の読み込み処理を見ました。
今回は、逆読みモード(reverse)の読み込み処理です。

reverse.c reverse関数

プログラムプログラム:

/*
 * reverse -- display input in reverse order by line.
 *
 * There are six separate cases for this -- regular and non-regular
 * files by bytes, lines or the whole file.
 *
 * BYTES    display N bytes
 *  REG mmap the file and display the lines
 *  NOREG   cyclically read characters into a wrap-around buffer
 *
 * LINES    display N lines
 *  REG mmap the file and display the lines
 *  NOREG   cyclically read lines into a wrap-around array of buffers
 *
 * FILE     display the entire file
 *  REG mmap the file and display the lines
 *  NOREG   cyclically read input into a linked list of buffers
 */
void
reverse(FILE *fp, const char *fn, enum STYLE style, off_t off, struct stat *sbp)
{
    if (style != REVERSE && off == 0)
        return;

    if (S_ISREG(sbp->st_mode))
        r_reg(fp, fn, style, off, sbp);
    else
        switch(style) {
        case FBYTES:
        case RBYTES:
            bytes(fp, fn, off);
            break;
        case FLINES:
        case RLINES:
            lines(fp, fn, off);
            break;
        case REVERSE:
            r_buf(fp, fn);
            break;
        default:
            break;
        }
}

解説解説:

この関数では、
fowardと比べてシンプルです。

ファイルの場合は、r_reg関数に任せている
REVERSEの場合は、r_buf関数に任せるといった

関数 分けがしやすい構造にしているためです。

今回は短いですが
この2つの関数が長いため

まとめて記載することをやめました。

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

コメント