TCP/IP Socket in cをPerlで振り返るシリーズの第6弾ですが、今回でこのシリーズは終わりにしようと思います。
前回のシグナルに続いて、今回はノンブロッキングになります。
簡単に自分のために説明を書いておくと、ブロックされた関数のプロセスは、OSによって一時停止にされるけど、シグナルハンドラを使って、ノンブロッキングさせるというものです。
そのハンドラにSIGIOとSIGARLMを使ったサンプルを載せているというものですな。
1巡目はそれほど分かってなかったんですが、今回はなるほどと思えました。
Perlがどうのこうのというよりも、概念の理解が深まったという事だね。
という事で、SIGIOとSIGALRMを使っているのだけど、そもそもPerlのPOSIXモジュールで使えるのかどうか試してみた。
# perl -c sigaction_b.pl [/root/perl] Bareword "POSIX::SIGIO" not allowed while "strict subs" in use at sigaction_b.pl line 13. Bareword "SIGIO" not allowed while "strict subs" in use at sigaction_b.pl line 18. sigaction_b.pl had compilation errors.
なんとSIGIOは使えないらしいorz
最初に確認しといてよかったよ。
SIGALRMはちゃんと通りました。
Perlmonks
http://www.perlmonks.org/?node_id=151509
PerlmonksでSIGIOを自分で作っている人がいたけど、よし!わしもSIGIOに挑戦じゃ!とはならなくて、それならC言語でやるよ。
cpanでもなかった。
なんとなくpythonはどうなのか知りたくなったので試してみた。
import signal import os def do_exit(sig, stack): raise SystemExit('Exiting') signal.signal(signal.SIGIO, do_exit) print 'My PID:', os.getpid()
実行結果
# python python.py [/root] My PID: 23566
エラーにならずに通りました。
おのれPython!!
Perlで何でもできそうなイメージがあったけど(作れば可能らしいので、できないという事ではないのだが)、やっぱりC言語だ!
Perlに慣れるという事が目的だった事、今回出てきたPythonのプログラムもパッと見てだいたい理解はできたので、スクリプト言語へのアプローチもちょっとは力がついたという事だろう。
ってことで、目的は達成できたので、次の段階に進むことにしました。
次ですが、話は数日ほどさかのぼり、zshの書籍を見に行ったんだけど、いまいちだったんで本屋さんをぷらぷらしてたら面白そうなTCP/IPプログラミングの書籍があったので購入。
軽くすべてのページに目を通しましたが、ネットワークにも詳しくなる内容になっているので、ガッツリとやっとこうと思います。
ちょっと強引ですけど、よくある話でしょ。
それでいいの今は。
参考文献
TCP/IPソケットプログラミングC言語編
共著:Michael J.Donahoo/Kenneth L. calvert
訳:小高知宏