L'Isola di Niente
L'Isola di Niente » C and GLib Tips » C Tips

C Tips

端末入力とパイプ入力で振り分け
#include <stdio.h>
#include <unistd.h>

int
main (int argc, char* argv[]) {
    if (isatty(0)) {
        printf("stdin == Console\n");
    } else {
        char pipe[256];
        fgets(pipe, 256, stdin);
        printf(pipe);
    }
    return 0;
}

一行上に出力
#include <stdio.h>

/*
 * \033[数値A で戻りたい行数の数値
 * \033[0J    でカーソル以降の行を削除
**/

int
main (int argc, char* argv[]) {

    char* strs[4] = {"いーち", "にー", "さーん", "だぁー!"};
    int i;

    printf("いくぞー\n");
    for (i=0; i<4; i++) {
        sleep(1);
        printf("\033[1A\033[0J"); /* 移動 */
        printf("%s\n", strs[i]);
    }
    return 0;
}

色分け表示
#include <stdio.h>

/* 参考
 * http://7ujm.net/etc/esc.html 
**/

int
main (int argc, char* argv[]) {

    printf("\033[32m緑色おおおお\n");
    printf("\033[31m赤色おおおお\n");
    // 戻す
    printf("\033[39m");
    return 0;
}

setlocale
#include <stdio.h>
#include <locale.h>

/*
 * gcc では ja-JP.UTF-8 になるはず
**/

int
main (int argc, char *argv[]) {

    char *locale;

    locale = setlocale(LC_ALL, "");
    printf("locale は[%s]です\n", locale);

    return 0;
}

組み込みマクロ
#include <stdio.h>

int
main (int argc, char *argv[]) {

    printf("ファイル名は[%s]です\n", __FILE__);
    printf("現在[%d]行目を処理しています\n", __LINE__);
    printf("ビルド日時は[%s %s]です\n", __DATE__, __TIME__);
    printf("保存日時は[%s]です\n", __TIMESTAMP__);
    if (__STDC__)
        printf("ANSI C 準拠です\n");

    return 0;
}

cat の実装例
#include <stdio.h>
#include <dirent.h>

int
main (int argc, char *argv[]) {

    DIR *dir;
    struct dirent *dp;

    dir = opendir(".");
    while ((dp = readdir (dir)) != NULL) {
        if (dp->d_name[0] != '.' && dp->d_type == DT_REG)
            printf("%s\n", dp->d_name);
    }
    return 0;
}

シェルスクリプトの実行
#include <stdlib.h>

int
main (int argc, char *argv[]) {
    /* オプションもパイプも使えます */
    system("ps ax | grep bin");
    return 0;
}

Copyright(C) sasakima-nao All rights reserved 2002 --- 2017.