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

Posted: 2013年03月14日

前回は、printscol関数を解説してきました。
今回はprintscol関数が表示処理に用いているprintaname関数を解説していきます。

print.c printaname関数です。

プログラムプログラム:

static int
printaname(const FTSENT *p, u_long inodefield, u_long sizefield)
{
    struct stat *sp;
    int chcnt;
#ifdef COLORLS
    int color_printed = 0;
#endif

    sp = p->fts_statp;
    chcnt = 0;
    if (f_inode)
        chcnt += printf("%*ju ",
            (int)inodefield, (uintmax_t)sp->st_ino);
    if (f_size)
        chcnt += printf("%*jd ",
            (int)sizefield, howmany(sp->st_blocks, blocksize));
#ifdef COLORLS
    if (f_color)
        color_printed = colortype(sp->st_mode);
#endif
    chcnt += printname(p->fts_name);
#ifdef COLORLS
    if (f_color && color_printed)
        endcolor(0);
#endif
    if (f_type)
        chcnt += printtype(sp->st_mode);
    return (chcnt);
}

解説解説:

各属性(inode, blocksize)を表示しています。
それぞれ表示幅に従いprintfを用いて表示しています。

%*ju
%u Unsiged表示 *j表示幅設定

colortypeで表示色を設定後
ファイル名を表示し、
表示色を解除します。
その後、ファイルタイプを表示します。
各属性は、フラグが設定されているかに基づき表示しています。
このフラグは、lsの引数で設定されたフラグです。

次回は、色付け処理colortypeとendcolorとその中で呼び出している関数を解説していきます。

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

コメント