« WEBメモ帳 | メイン | 部活の説明会 »

2006年04月18日

ふぁいるでぃすくりぷた

今日は目覚めたら久々の快晴。
布団干し日よりだと判断した俺は、すでに遅刻気味の時間だったのに布団を干しました。
結果、1時間目は欠席と判断されるレベルの遅刻時間になりました。

どうせ出席にならないならー・・・っと、親が他の部屋の布団干すのを手伝ってたんですが、思いの他時間を食って、2時間目も40分遅刻となりました。
残念な事に、担当がちょっときびしめの講師で、欠席扱いになりました(´・ω・`)

天気のばかやろー。

午後のPSⅡAとゲーム理論は、授業内容は面白いんだけど、担当講師の話が脱線しすぎるのが鬱。
しかも、1週間に9時限(時間にすると13時間半!)もこの人の授業があるわけで、同じ話を数回聞くはめになる('A`)
脱線話は適当に聞き流して、来週あたりはPS用のライブラリでも作りたいなぁ。
画像描画系が、API関数そのまま使ってたらだるすぎるので(´・ω・`)
C++使えたら楽なんだけど、C言語しか提供されてないのも激しく鬱。


ライブラリといえば、ネットワークプログラミングの授業で作るソケット用のクラスを、今後も使って行ける汎用的なものに仕上げたい。
ソケット関係を掘り下げて学ぼうとしてる事を知った、バイト先の上司様から助言をいただいた。
「forkとpipeとfile descriptorを使うと良いよ」

まったくわからなかったので、即座に検索してみました。
fork()ってのは、自分とまったく同じ子プロセスを生成する関数で、戻り値で親側と子側を判断する、便利で面白い関数でした。

pipeってのは要するにプロセス間のリダイレクトの事のようです。
今まで知ってたリダイレクトってのは、コマンドラインとかで『ls > buf.txt』とかするように、プロセスの結果をファイルにリダイレクトしてました。
それとは違って、片方のプロセスの標準入力と、もう片方のプロセスの標準出力を連結したりするのが、文字通りパイプです。

file descriptorってのは、ファイルや標準入出力を判断する識別子(ハンドル)の事。
標準入出力とエラー出力で、0,1,2を使ってて、新たに取得されるハンドルは3から割り振られる。
身近なものだと、fopenなどで返されるファイルハンドル(ファイルポインタ)なんかがそれにあたる。


socketが返すハンドルもファイルディスクリプタで識別されているので、ファイルと区別無くread・writeでシームレスに読み書きができるようです。
プロセス間通信のioもソケット通信のioも、ファイルディスクリプタで識別されるので、selectでまとめて監視する事が可能です。


若干の問題があるとすれば、fileとsocketの扱いをファイルディスクリプタで纏めてるのはLinux環境だけの話で、Windows上でのsocketはfileと別扱いです。
振り出しに戻るかと思いきや、Winsock2ではsocketハンドルもfileハンドルも扱いが同じなので、_open_osfhandleを使うことで解決できそうです。
ただ、これだとWinsock2が入ってない環境だと、DLLつけないといけないわけだけど・・・。
ReadFileAPIには、ソケットハンドルも渡せるみたいなんだけどWinsock2が入って無くてもいけるってことなんだろうか?

たぶん、何も教わることなく実装してたら、汎用性のかけらも無いものになってたんじゃないかってくらい、色々学ばせていただきました。
元々、プロセスではなくスレッドを使ってマルチスレッドを実装しようとしてたり、
サーバークライアント型がめんどくさそうだったので、接続数が数人でもP2Pで全部つないでしまおうかとか考えてたので( ´-`)


ってか1時半には寝ようと思ってたのに、こーゆーこと調べだすと、時間とか見なくなるなorz




参考URL
・68user's page「ネットワークプログラミングの基礎知識」
http://x68000.q-e-d.net/~68user/net/

・ショウソフトのHomePage「プログラム講座 シニア編」
http://hp.vector.co.jp/authors/VA003991/kouza/senior/index.html

・ 筑波大学情報学 講義「システムプログラム」 授業内容メモ
http://www.coins.tsukuba.ac.jp/~yas/coins/syspro-2004/

・「C++:language&libraries」ML 非公式ライブラリ
http://www.tietew.jp/cppll/archive/5844

投稿者 tyoro : 2006年04月18日 02:41

コメント

コメントしてくださいYO




保存しますか?