第三回スパルタンプログラミング
- 何がしたいか?何が問題か?を意識して変なとこでぐだぐだ考えないこと。
- 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)
- 作者: ジョン・R レビン,ドウーブラウン,トニーメイソン,John R Levine,Doug Brown,Tony Mason,村上列
- 出版社/メーカー: アスキー
- 発売日: 1994/10
- メディア: 単行本
- 購入: 2人 クリック: 32回
- この商品を含むブログ (11件) を見る
当面の目標
実際に使うには
flexとbisonを使いましょうbyいっしー
やりながらのメモ
進捗
- 自分のソースからlexで作った関数を呼び出すことができた
- yacはデバッグの途中
- なんとなくHTTP1.0はlex使えば書けそうだなという見通しがついた
分からないことが分かったこと
- cのexternの使い方
- cのstaticの使い方
参考
RFC
lex & 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に上げる。