第二十一回スパルタンプログラミング
何がしたいか?何が問題か?を意識して変なとこでぐだぐだ考えないこと! 30分悩んで分からなかったら、早めにヘルプを出す。
と言っても今週は日曜出勤なのでいっしーの巣には行かず、自宅で一人コーディング。
コーディングよりも自転車のversion upに胸熱の2週間だった。
時系列では、
- 09.22-23:bnfc試すために、ghc入れ直したり、
- 09.24:lexでなんとかならんかと奮闘したり、
- 09.25:ポインタと実体でバカ丸出ししたり
- 09.26:ss読みまくり(だからiphoneをなんとかしろと、何度自分に言い聞かせればry)
- 09.27:自転車の相談をサイクルショップ光でしたり
- 09.28:休日出勤し、料理し、自転車のパーツばらしを27時までやったり
- 09.29:光にばらした自転車持ってったり、
- 09.30-10.03:ロードバイクのホイールスレを読みまくったり
してた。
やりたいこと
lexでブラウザからのリクエストを解釈したい。
やったこと
14.09.22
- ghcインストールが終わらない。。
14.09.23
14.09.24
- 引き続きlexの解釈部デバッグ。
- lexを行に対して行うことに方針を決定。理由はクライアントがHTTP-messageをばこっと送ってくれるか不明である、行解釈の方が規則部がシンプルになる予感がしたから。
- REJECTを使うと、start stateが無効になる。これはREJECTが内部的にstateを使っているためだと思う。
- REJECTの後のアクションは実行されない。
14.09.25
Q:lexの定義部に構造体ポインタを宣言し、アクションでアクセスしようとするとsegmetasion fault。構造体実体宣言だと通る。なぜ?
A:実体がないからだった。orz 実体なくても動く時があったのですぐに気づけなかった。初心者ェ
struct metaperson{ char *name; }; int testassign(char **test, char *name); int main(){ struct metaperson *isshi; fprintf(stderr,"%p\n", &isshi); char *name="isshi"; testassign(&(isshi->name), name);//実体はないがポインタを渡せる。 fprintf(stderr, "main %s\n", isshi->name); fprintf(stderr, "main %p\n", isshi->name); return 0; } int testassign(char **test, char *name){ *test=(char *)malloc(sizeof(char)*(strlen(name)+1)); strncpy(*test, name, (strlen(name)+1)); fprintf(stderr, "testassign %s\n", *test); return 0; }
メモ
- selectの第一引数について
- リスニングソケットとその他をまとめて扱っているが、性質が異なるので分けた方が良い気がしてきた。ただ直近の対応で無くてもいい気がする。
- スレッド間共通で扱うものは、現状自前のSocketCBのメンバのみ。