title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2018/06 >>123456789101112131415161718192021222324252627282930
Powered by BLOM cuLinux用に daemon を作ってみた。
小さくも大きくも閉じたりもしません
09/09/19 11:58 / その他のソフト

先日、購入した uST-SH2 は組込用Linuxの cuLinux が入っています。uST-SH2 自体には Ethernet もついているので当然 TCP/IP 通信が出来るわけです。

やっぱり何かを動かしたいということで、やっぱりサーバーを作ってみることにします。
1時間ほどで簡易サーバーの出来上がり。
ただ、シングルスレッド、シングルプロセスですので実行すると当然シェルが止まります。kill すら出来ません(^-^;

さて、ここからが問題。
Windows であれば Thread を起こして子スレッドを動かします。
そして一般的な Linux であれば、inetd or xinetd を使って STDIN/STDOUT を使ってマルチプロセス化します。

どうにも、uST-SH2 に搭載されている cuLinux には inetd や xinetd が見あたりません。(/etc/inetd.conf が無いから多分無いと判断)

うーん、inetd を入れれば良いんだろうけど、できればルートファイルシステムを変更してどうこうってのはやりたくないなぁ。

って、ことで fork() を使って子プロセスを作ってマルチプロセス化?してみます。
無論、cuLinux で fork() は使えない(MMU無いから)のはわかっていましたが、もしかしたら動くかも!と淡い期待を寄せての話なんですけど。

開発環境である、coLinux 上で動作確認(こちらでは当然動く)して、uST-SH2 に転送。(正確には uST-SH2 から ftpget ですが)

期待通り!動きません!

やっぱ、vfork() を使わないとダメなのね。ということで vfork() に変えたのですが、vfork() って使ったことが無い。(仕様の推奨はされていないと記憶しています)
まぁ、取りあえず動かしてみるかということで、動かしてみると止まります(^-^;、全然 fork してません。

ここで、vfork() を調べてみたら、どうやら fork() と違い、vfork() は親プロセスを停止してくれやがるそうです。
なんじゃそら。

vfork() を更に調べると、どうやら子プロセスで _exit() されるか、exec() とかするまで親プロセスはブロックするようです。
えーと・・・何かややこしいけど、fork() みたいには使えないってことですね。
ソース増えるからイヤなんですが、渋々コードを分割して、daemon とサーバーに分離します。

んで、daemon 側で vfork() して、exec() して・・・
あ、動いた(^-^

photo


上の画像の通り、Port10000 で Listen しています。
下は XP の telnet で Port10000 に接続した所です。
ちゃんと動いています。

出来れば1本の実行ファイルでやりたいと思いましたが、相変わらず動けば正義なので、これで良しとします。

後はサーバー本体にコマンドを実装していけば色々できます。やろうと思えば SMTPやPOP3も出来るでしょう。(さすがにやりませんが)
あ、でも、SMTP実装すれば超小型中継サーバーとか作れるかも。ちょっと面白そう。(やりませんよ?)

[更新日付:2009/09/19 12:30:39]
トラックバックを見る(0)
Log Link [http://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+c325aa7f1ac09e0c667a6ea0f02eca678fc0ece6]
TB Link [http://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+c325aa7f1ac09e0c667a6ea0f02eca678fc0ece6]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.