ポジローぽけっと

昨日より今日、今日より明日を信じて、トライトライ

第二十一回スパルタンプログラミング

何がしたいか?何が問題か?を意識して変なとこでぐだぐだ考えないこと! 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

  • ghcインストールが終わらない現象の解決方法見つけて、直す。
  • gitit入れ直し、bnfc試す。LBNFを理解したい気持ちがあふれず、断念。
  • lexの解釈部デバッグ

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のメンバのみ。