Linux と FreeBSD ではネットワークのプログラムが違う
2007-01-04 00:34:41
| Permalink
| ![]()
| Tag:
c言語
unix
ネットワーク
パソコン
プログラミング
メモ
日記
ネットワークの授業の関係で、ヘッダを偽装したパケットを一つ流そうと思ってプログラムを書いたところコンパイルが通らない。
malloc free exit してみたら http://kmaebashi.com/.../malloc.html が引っかかった。ここには exit すると free しなくても OS が開放してくれると書いてある。
でも main で return 0; したら開放してくれないんだろうな……。
再び課題の採点中ですよー。今回から課題提出システムが変わった関係で、採点プログラムを PHP から zsh スクリプトに変えました。
初めて知った。既存のコードとぶつからないように _Bool がデフォルトで用いられる変数型名らしいが、stdbool.h を読み込むことで型名に bool、真偽値に true と false をコード内に用いることが出来るらしい。
http://libc.blog47.fc2.com/。C++ での実装らしいけど、やっぱ自力でやるしかないのかなぁ。GNU 関連のソースを流用するのも手だけど、後々コードを公開したい時に GPL を適用しなきゃならないからなぁ(LGPL だったら良いけど)。まぁ個人的に使っている時は GNU ソースを使い、公開するときに自力で標準関数を実装するというのも手か。
gcc のバージョンによって動作結果が違う……何でだっ!
void aaa(void){
struct katamari *hoge;
hoge = (struct katamari *)malloc(sizeof(struct katamari));
hoge->what = "hoge is hoge";
}
良い例が書けない……。えぇと、関数 aaa で構造体 katamari へのポインタ hoge をプロトタイプしておく。この状態で malloc してメモリを確保すると 1 回目は成功する。当然ながら 2 回目以降もメモリを確保し続けるはずなのに、 Debian with gcc v2.95 だと 2 回目の malloc で segmentation fault。まじありえない。Fedora Core with gcc v4.00 だと問題なし、って他のライブラリ関係ですか?