ruby/ext/pty/README.jp

90 строки
2.7 KiB
Plaintext
Исходник Ответственный История

Этот файл содержит неоднозначные символы Юникода!

Этот файл содержит неоднозначные символы Юникода, которые могут быть перепутаны с другими в текущей локали. Если это намеренно, можете спокойно проигнорировать это предупреждение. Используйте кнопку Экранировать, чтобы подсветить эти символы.

pty 拡張モジュール version 0.3 by A.ito
1. はじめに
この拡張モジュールは仮想tty (pty) を通して適当なコマンドを
実行する機能を ruby に提供します.
2. インストール
次のようにしてインストールしてください.
(1) ruby extconf.rb
を実行すると Makefile が生成されます.
(2) make; make install を実行してください.
3. 何ができるか
この拡張モジュールはPTY というモジュールを定義します.その中
には,次のようなモジュール関数が含まれています.
getpty(command)
spawn(command)
この関数は仮想ttyを確保し指定されたコマンドをその仮想tty
の向こうで実行し配列を返します戻り値は3つの要素からなる
配列です最初の要素は仮想ttyから読み出すためのIOオブジェクト
2番目は書きこむためのIOオブジェクト3番目は子プロセスのプロ
セスIDですこの関数がイテレータとして呼ばれた場合これらの
要素はブロックパラメータとして渡され関数自体はnilを返します
この関数によって作られたサブプロセスが動いている間,子プロセス
の状態を監視するために SIGCHLD シグナルを捕捉します.子プロセス
が終了したり停止した場合には,例外が発生します.この間,すべての
SIGCHLD が PTY モジュールのシグナルハンドラに捕捉されるので,
サブプロセスを生成する他の関数(system() とか IO.popen()など)を
使うと,予期しない例外が発生することがあります.これを防ぐため
には下記のprotect_signal()を参照してください.
この関数がブロックパラメータ付きで呼ばれた場合には,そのブロック
の中でのみ SIGCHLD が捕捉されます.したがって,ブロックパラメータ
として渡されたIOオブジェクトをブロックの外に持ち出して使うの
は勧められません.
protect_signal
この関数はイテレータです.ここで指定されたブロックの中では,
子プロセスが終了しても例外を発生しません.この関数を使うことで,
PTYの子プロセスが動いている間でもsystem()や IO.popen()などの
関数を安全に使うことができます.例えば,
PTY.spawn("command_foo") do |r,w|
...
...
PTY.protect_signal do
system "some other commands"
end
...
end
このような記述により,"some other commands" が終了したときに
例外が発生するのを防げます.
reset_signal
PTY の子プロセスが動いていても,そのプロセスの終了時に例外が発生
しないようにします.
4. 利用について
伊藤彰則が著作権を保有します.
ソースプログラムまたはドキュメントに元の著作権表示が改変されずに
表示されている場合に限り,誰でも,このソフトウェアを無償かつ著作
権者に無断で利用・配布・改変できます.利用目的は限定されていませ
ん.
このプログラムの利用・配布その他このプログラムに関係する行為によ
って生じたいかなる損害に対しても,作者は一切責任を負いません.
5. バグ報告等
バグレポートは歓迎します.
aito@ei5sun.yz.yamagata-u.ac.jp
まで電子メールでバグレポートをお送りください.