C言語で行末の空白を赤の下線で強調表示する
C言語でターミナルで表示される文字をカラー表示させる でのエスケープシーケンスによるカラー表示を使って行末の空白文字列を明示させてみる。 空白文字が見つかったら空白以外の文字が見つかるまでスキップして、見つかった空白以外の文字が ‘\n’ ならば下線付きでカラー表示させてスキップ回数分の空白を出力する。 見つかった空白以外の文字は ungetc を使って標準入力に戻す。 #include <…続きを読む
C言語でターミナルで表示される文字をカラー表示させる でのエスケープシーケンスによるカラー表示を使って行末の空白文字列を明示させてみる。 空白文字が見つかったら空白以外の文字が見つかるまでスキップして、見つかった空白以外の文字が ‘\n’ ならば下線付きでカラー表示させてスキップ回数分の空白を出力する。 見つかった空白以外の文字は ungetc を使って標準入力に戻す。 #include <…続きを読む
C言語でエスケープシーケンスを使って端末に表示される文字・背景をカラー表示させてみる。 \x1b は ESC の16進表記 背景色 前景色 黒 \x1b[40m 黒 \x1b[30m 赤 \x1b[41m 赤 \x1b[31m 緑 \x1b[42m 緑 \x1b[32m 黄色 \x1b[43m 黄色 \x1b[33m 青 \x1b[44m 青 \x1b[34m マゼンタ \x1b[45m マゼンタ…続きを読む
8.7 記憶割当て malloc, free の簡単な実装を学ぶ。 malloc 時に要求サイズが空きブロックより小さい場合に、後側からブロックを使用していくことに気がつかず、理解するのに時間がかかった。 後側からブロックを使用していくのは、空きリストのポインタを変更しなくてもよいからだろうか。 演習8-7 malloc での妥当なサイズの条件がいまいちわからない。 負の値が渡された場合、unsi…続きを読む
演習8-6 void *my_calloc(unsigned n, unsigned size) { void *p; if ((p = my_malloc(size * n)) == NULL) { fprintf(stderr, "can’t allocate memory\n"); exit(EXIT_FAILURE); } memset(p, 0, size * n);…続きを読む
演習8-5 リンク数 (st_nlink) と最後に inode が変更された時間 (st_ctime) を表示させてみる。 #include <time.h> #define MAX_TIME_STR 100 void parseTm(const struct tm *tp, char *str) { strftime(str, MAX_TIME_STR, "%b %d %…続きを読む
演習8-4 /* fp に対してファイルの位置を指定する * バイナリ・ファイルに対しては、origin から offset 文字だけ離れたところにセットする * origin には MY_SEEK_SET (始め), MY_SEEK_CUR (現在位置), MY_SEEK_END (ファイルの終り) が指定可能 * テキスト・ファイルに対しては、offset はゼロ、または ftell (この場…続きを読む
演習8-3 この _flushbuf と my_putc だと、fp->cnt が 0 未満にならずに終了してしまう場合に、どうしてもデータがバッファに残ったまま書き出されない状態になってしまう。 /* _flushbuf : 出力バッファを書き出す * ファイルが書き込み用にオープンされていなければ即座に MY_EOF を返す */ int _flushbuf(int c, MY_FILE…続きを読む
演習8-2 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #define MY_NULL 0 #define MY_EOF (-1) #define MY_BUFSIZ 1024 #define MY_OPEN_MAX 20 /* 一時に開け…続きを読む
演習8-1 p208 の syscalls.h のインクルードの代わりに unistd.h をインクルードする。 参考:ふつうの Linux プログラミング p80 ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道 posted with amazlet at 10.03.11 青木 峰郎 ソフトバンククリエイティブ 売り上げランキング: 26006 Ama…続きを読む
演習7-9 スペースを節約する isupper #include <stdio.h> int my_isupper(unsigned char); int main(void) { char c1 = ‘d’; char c2 = ‘D’; printf("%c isupper? => %d\n", c1, my_isupper(c1)); printf(&q…続きを読む