C言語が、お好きでしょ

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
訳:小高知宏

 

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *