gcc

ふつうのLinuxプログラミング 17章 デーモンになる

GCC

ぐへへへ。ワタシがデーモンである・・・(意味不明と言う訳でボクノスサーバーがデーモンになりました。デーモンになるときは、chdir("/")して、標準入出力を/dev/nullに繋いで、端末と切り離すと。chdir("/")しているので、起動引数が長くなります(ちとはま…

GDBで子プロセスのデバッグ

GCC

困ったぞ さて、fork後に子プロセスを呼ぶにはどうしたらいいのか・・・。コレが出来ないとこの先とっても辛いので調べます。マルチプロセス・プログラムのデバッグありました。さすがマニュアル!子プロセスに制御を移したいときは「set follow-fork-mode ch…

ふつうのLinuxプログラミング 17章 ついに・・・ついに・・・

GCC

17章前半戦 いやぁ。やっとこの時がきました。httpサーバーのブラウザに表示!!socket→bind→listinでストリームに接続。acceptした瞬間、デバッガの動きが止まり、クライアントからのリクエストを待っています。firefoxでアクセスしてみます・・・。http://lo…

GDBのフロントエンドInsightをインストールしてみた。

gcc

インストール GDBハンドブックで紹介されていたGDBのフロントエンドInsightをインストールしてみました。fedoraのパッケージに無かったので、ソースコンパイルでした。fedoraなんも入っててぇなぁ・・・。 試す % insight httpd ←いま作ってる奴メニューをの…

gccの-Wextraは親切。

gcc

gccの警告オプション-Wallはいつも付けているのですが、-Wオプションは恐くて付けていなかった。gcc4では、-Wの代わりに-Wextraを付ける。Makefileに追加してみる。 CFLAGS=-Wall -Wextra makeすると・・・ request.c|223| warning: unused parameter ‘info’…

有用そうな3つのC言語リンク

GCC

最近C言語なtanakaです。C言語なんて・・・今時・・・と思われるかもしれませんが、PerlもPHPもRubyもみんなC言語で作られてるんですよ!つまり、C言語を学ぶと・・・4つの言語を同時習得出来てしまう!!遠回りしたつもりで、実は近道かもしれないと思う訳。3…

謎の(void)fprintf()

gcc

C FAQ 17 printf()を呼び出しているところすべてに、いちいち(void)のキャストを付けているコードを見かけた。なぜこんなことをするのか。 FreeBSD lsのusageより。 void usage(void) { (void)fprintf(stderr, #ifdef COLORLS "usage: ls [-ABCFGHILPRSTUWZa…

ふつうのLinuxプログラミング 第16章 httpサーバーtelnet風

GCC

ふぅ。やっと16章終了〜。telnet風にリクエストを送ると、ファイルを返せるようになりましたぁ〜 % ./httpd . GET httpd.c HTTP/1.0 HTTP/1.0 200 OK Date: Mon, 16 Apr 2007 15:45:16 GMT Server: httpd/1.0 Connection: close Content-Length: 517 Content…

GNU cflowインストールメモ。

GCC

fedoraパッケージで見付からなかったので、GNU cflowをソースコンパイルした。メモしておく事にする。 % wget http://ftp.gnu.org/gnu/cflow/cflow-latest.tar.bz2 % tar xvf cflow-latest.tar.gz % cd cflow-1.1 % ./configure % make % sudo make install …

FreeBSDのソースコードをゲットせよ!

GCC

FreeBSDのlsのソースを見たとき、おぉぉぉぉコレダ!と思った。やはり、GNUは相当見にくいので、FreeBSDのソースコードを入手する事にした。FreeBSDの場合、コアパッケージの中に基本ユーティリティも入っている事が判ったので、がが〜っと、CVSでダウンロー…

コールグラフの可視化に挑戦。

GCC

最近、黒い画面ばかり眺めているtanakaです。昨日から考えていた。「プログラマの考えていることをユーザーにわかりやすく説明するにはどうしたらいいか。」僕たちのアウトプットはどうしても文字になってしまう。黒い画面に、白いテクスト。叩き出された一…

ステップ実行に関するgdbのメモ

gcc

continue ブレークポイントまたはwatchポイントまで実行 next ステップアウト(呼出先には飛ばない) step ステップイン(呼出先まで飛ぶ) 性質の違う3つのステップ実行を使い分けるのがポイント。

HTTPサーバー製作途中経過・・・

GCC

まだ16章で止まってます(遊びすぎそんな時は、やる気を出すためのワンライナ。 % wc -l *.[hc] Makefile 25 httpd.c 59 libs.c 7 libs.h 176 request.c 24 request.h 21 Makefile 312 total312行書いた!!まだ16章は長そう・・・。 追記 2007-04-12 C faqを見…

gdbの履歴に関するメモ

GCC

gdbの履歴制御はちょっと特殊。 M-pを押すと、:が出る。 検索したい文字を打ったらタブではなくエンターで決定する。 結論。動作がイマイチなので、C-r(インクリメンタルサーチ)を使った方がいい。 参考 Debugging with GDB - コマンドライン編集 - ヒストリ…

ふつうのLinuxプログラミング第16章 前半 HTTPサーバー製作開始!

gcc

とうとうHTTPサーバー製作開始!!って過激にムズくなった・・・。リンクリスト、文字列処理、シグナル、mallocと苦手どころが満載!!やっぱりCで作るとやたらむじぃ。ちょいちょい実験を重ねながら進めているので進みはかなり遅いです。strchrによる文字列分解…

ふつうのLinuxプログラミング第16章 中盤 ポインタ、ポインタ、ポインタ

gcc

やっと、HTTPリクエストヘッダ解析になりました。やはりC言語での文字列処理は大変!!C言語にはsplitなどという便利な機能は備わっていないので、ポインタを一歩づつ進めながら、文字を解析、分解、連結リストの中にぶち込んでいきます。telnetと同じようにリ…

GDBのフロントエンドDDDを使ってみた。

gcc

ソースコードを読むための技術で紹介されていた、GDBのフロントエンドDDDを使ってみました。DDD - Data Display Debugger - GNU Project - Free Software Foundation (FSF)使い方は、GDBに拡張命令を加えた感じ。メニューから選べるし、ソースクリックだけで…

mallocのテストをしたい!

GCC

なかなかメモリ確保に失敗することが無いので、こうしてみた。 p = malloc(INT_MAX); if (!p) { perror("malloc(3)"); exit(EXIT_FAILURE); } malloc(3): Cannot allocate memoryやった。何処までいけるかな

Linuxプログラミングで参考になるマニュアルのメモ。

GCC

man編 セクション番号 2 システムコール 3 ライブラリ 0p POSIXヘッダ 0pが使える。 % man 0p sdtio.hこれでstdio.hの関数定義一覧が見れる。zshだと、セクション番号入れると補完が利くのでかなり便利。単語検索-Kと併用すれば・・・ % man 0p -K INT_MAX /…

lsコマンドのソース

lsコマンドのソース(FreeBSD版)|gihyo.jpより。 書籍『ふつうのLinuxプログラミング』の著者である青木峰郎氏が「lsのソースを読んでないのはプログラマとしてかなりまずいのではないでしょうか」と言及していました。 !!読もう。←まずい人とりあえず最新…

ふつうのLinuxプログラミング 第13章〜第15章 いよいよネットワーク!!

gcc

さて、いよいよ後半戦。第3部!!Linuxネットワークプログラミング!!まずは、daytimeクライアント。サーバーの時計が見れるらしい。っていきなりむじぃし・・・サンプルにヘッダ書いてないし・・・。仕方ないので、manを叩きまくり、Vimの補完で楽をしつつ、GD…

ふつうのLinuxプログラミング 第11章-第12章1 メモリとプロセス

gcc

11章はメモリ、ハードウェア、コンパイルの説明。いつまで経っても、ポインタは苦手(汗驚いたのが、コレ。/proc/pid番号/mapsで、メモリの使用状況が判る。 % ps PID TTY TIME CMD 6224 pts/5 00:00:00 ps 31822 pts/5 00:00:16 zsh % cat /proc/31822/maps …

ふつうのLinuxプログラミング 第10章 ファイルシステム

gcc

今回はls,mkdir,rmdir,ln,symlink...等ファイルシステム関連。全部やるとしんどいので、ls,mkdir,rmdirだけ作った。後はほぼ同じような感じ。「rm -r」面倒だなぁと思ったら、ファイルシステムとの絡みがあると。linuxの"何故"が見えてくる所がおもろい。で…

ふつうのLinuxプログラミング 第11章-第12章1 forkがわからねぇ〜。

gcc

あぁ、昨日のforkがイマイチ掴めていない。なので、実験を重ねる。 printf("hoge\n"); pid = fork(); hogeは1度しか表示されない。つまり、 | printf("hoge\n"); | +--+ fork(); | | 親 子であることが、確認できた。最初から実行している訳では無い。あぁ・…

ふつうのLinuxプログラミング 第9章 ディレクトリの構造

gcc

第9章はプログラムを書かない項なのですが、重要どころなので、Linuxのディレクトリを巡るツアーを慣行致します。 /bin ブートに必要な基本コマンドが入っていると。 見たことあるプログラムが多いけど、まだまだ試したことのないファイルが結構あります。気…

make時に通常コンパイルとデバッグコンパイルを分ける。

makeはタイムスタンプと依存関係を洗い出しコンパイルの必要のあるものだけ再コンパイルしてくれる。しかし・・・それが仇になることもよくある話・・・。例えば、makeとmake debugで、コンパイル条件を別けてコンパイルしたくなる。しかし、示しているター…

ふつうのLinuxプログラミング 第8章 grepコマンドを作る

gcc

いよいよやってきました!!「grepコマンドを作る」!!自分で正規表現ライブラリなんか書いたら・・・いつまでかかるか・・・お手軽libcを使って書いていきます。前に作ったheadコマンドを修正してっと。make debug!! (gdb) r "[grep]{4,}" grep.c Starting pro…

ふつうのLinuxプログラミング 第7章 gdb

gcc

以前にも使ったことのあるgdb。以前に使ったときはアセンブラのデバッグだったので、あまり有用性を感じなかった。今回はcのデバッグに使ったのが、かなり有効に使えることがわかった。メモっておく。 % gcc -Wall -g -o head head.c % gdb head (gdb) r -n …

ふつうのLinuxプログラミング 第7章 headコマンド。

gcc

今回はheadコマンドを作る。catとあまり変わらない感じですが、引数に-n 5, -n5 --lines 5 --lines5等を取れるようにします。普通に組んだら、ここだけで大変なんですが・・・getopt.hのgetopt_longという便利な関数を使って、解析しちゃってます。便利すぎ…

マクロハック

gcc

GNU catのソースよんでま〜す。そんなわけで、safe_read.c safe_write.cからのハック。つまらない処理を担当するsafe_read.c,safe_write.cでは、1つのソースから2個のプログラムを吐いちまおうって寸法。簡単にread.cとwrite.cを作ってテストしてみた。 writ…