読者です 読者をやめる 読者になる 読者になる

ポジローぽけっと

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

第三回スパルタンプログラミング

  • 何がしたいか?何が問題か?を意識して変なとこでぐだぐだ考えないこと。                                                                      
  • 30分悩んで分からなかったら、早めにヘルプを出す。

以上に留意しつつ、第三回スパルタンプログラミングはっじまるよー。

(第二回もやったけど、まとめるのがおっくうなので省略。コード整理、理解の復習したり、ヘッダ書いたりしてた。)

以下、やったことや思ったことの覚え書き

前回の復習

sanosのhttpをぱくって理解してHTTP1.0サーバー書く手前までが前回だった。

サンプルプログラム

sanos.cは何をしているか?

  • ソケットをひらく
  • 1行読み込む(クライアントの要求例:GET / HTTP/1.1)
  • GET要求かどうか判断し、以下を処理

    -- GETコマンド以外は対応していない。GET以外は501

    -- 他のコマンドもあるってことか?これはRFCをチェック

    -- statでファイルに関する情報を取得できなければ404

  • ディレクトリ一覧の表示

  • ファイルだったらsend_file

やりたいこと

HTTP1.0対応のサーバをcでプログラムしたい

  • 仕様調査→HTTPのコマンドはどれだけあるの?→RFC読めばよい。→すべて読まずにポイントを押さえたい。
  • 実装→yacc, lexって使った方がいいのか?→使うにはどうしたらいいか?→まず一つ簡単なテストをして、理解し拡張をしてみる。

lexで何ができるのかを先に読んだ方が見通しが立つと思うよ。byいっしー

lexの勉強

lex&yaccプログラミング (NUTSHELL HANDBOOKS)

lex&yaccプログラミング (NUTSHELL HANDBOOKS)

当面の目標

  • lex & yaccの1章の演習問題までやる。→サンプルプログラムのyaccデバッグ
  • 自分のプログラムから呼び出す方法を知るには2章2.2節を読む必要が在る。→ここはできた

実際に使うには

flexとbisonを使いましょうbyいっしー

やりながらのメモ

  • yytext:パタンにマッチした文字列が入っている。
  • yyparse():yaccが生成した構文解析ルーチンのこと

進捗

  • 自分のソースからlexで作った関数を呼び出すことができた
  • yacはデバッグの途中
  • なんとなくHTTP1.0はlex使えば書けそうだなという見通しがついた

分からないことが分かったこと

  • cのexternの使い方
  • cのstaticの使い方

参考

RFC

rfc1945 http 1.0

lex & yacc

O'Reillyのサンプルプログラムをここで取得

yaccデバッグの方法

telnetの使い方

telnet host port

Q&A

Q:hostってよくいうけど、何をさして使っている言葉?

Q:MIMEって何?

A:MIME

いっしーの教え

バッファオーバーフローを防ぐため、strcpy, strcatはstrncpy, strncatを使いましょう。

http://www.ipa.go.jp/security/awareness/vendor/programmingv1/b06_02.html

宿題

  • coding規約へのリンクをgititに上げる。