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

 

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です