たのしいRuby 第15章 IOクラス

ここら辺からRubyの本領発揮。openだけで何でも出来てしまうLinux世界観を楽しめる最高のクラスだと思う。IOについて簡単に学びたいなら「ふつうのLinuxプログラミング」を読むべし。

では15章。IOクラスを学んでいく。

とその前に・・・

またVimの設定見直し。エディタの拡張大好きなので・・・。

今日は、定番プラグインmatchit.vimを導入〜。

if STDIN.tty?
  puts "tty."
else
  puts "not tty."
end

ってあって、ifの所で%を押すと、if~else~end~if〜と、巡れるようになります。

実は、僕、%使ってないっす(汗

大体、縦の動きは{}で移動します。改行単位移動。%も活用していきたいっす〜。

ファイルの入出力

C言語と同じと考えて問題なさそう。open-uriFTPまで出来ちゃうんですねぇ・・・凄い。

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コマンドを作れという練習問題があったので、ソースを確認してみた。

全く同じ事をしているけど、メモリ確保が大変。もう一度読み返す必要がありそうだ。。。