たのしいRuby 第15章 IOクラス
ここら辺からRubyの本領発揮。openだけで何でも出来てしまうLinux世界観を楽しめる最高のクラスだと思う。IOについて簡単に学びたいなら「ふつうのLinuxプログラミング」を読むべし。
では15章。IOクラスを学んでいく。
とその前に・・・
またVimの設定見直し。エディタの拡張大好きなので・・・。
if STDIN.tty? puts "tty." else puts "not tty." end
ってあって、ifの所で%を押すと、if~else~end~if〜と、巡れるようになります。
実は、僕、%使ってないっす(汗
大体、縦の動きは{}で移動します。改行単位移動。%も活用していきたいっす〜。
C言語と同じということは・・・
forkも出来るはず!!試すしかない。
fork.rb
#!/usr/bin/ruby puts "start fork..." fork do puts "child prosess..." exec "/bin/cat" end puts "waiting..." Process.wait puts "end fork..."
ほぼ感覚で作ってみた。自分自身のプロセスをfork(二股にわけて)、/bin/catに置き換える。waitでcatの実行終了を待つ。waitしないとゾンビになっちゃうぞぉ〜。
% ./fork.rb start fork... child prosess... waiting... Hello, Ruby IO Hello, Ruby IO ←ここでC-d end fork...
おぉぉぉぉ、catになりました。waitもしてます。簡単にシェルやサーバーが作れそうです。
うっほ。凄いサイト発見。
Rubyとは関係ないけど、IO関連を攻めるならやはりC言語を学ぶのが一番だと思う。
C言語初歩から、プロセス、シグナル、ソケット、スレッド等の扱いまで詳細に説明されてる。英語だが凄い。10年後に読もう(笑
パイプについて。
popenでは、簡単にパイプに接続することが出来るが、"w"か"r"しかできない。読み書き両用にするには、pipeとforkを使って、パイプを繋ぐ必要がある。popenはシェルを介して実行される。
と、ふつうのLinuxプログラミングに書いてあった。さすが青木さん!!
一生懸命popenでパイプを作ろうとしてしまった・・・。まだまだ、プロセス制御の道のりは長い。
メモ:ストリームのつなぎ変えはreopen
練習問題
tailコマンドの作り方は参考になりました。キューを使ってうまくさばいてます。なるほど。
そういえば・・・
ふつうのLinuxプログラミングにもtailコマンドを作れという練習問題があったので、ソースを確認してみた。
全く同じ事をしているけど、メモリ確保が大変。もう一度読み返す必要がありそうだ。。。