Next: , Previous: , Up: Processes   [Contents][Index]


38.7 プロセスへの入力の送信

非同期サブプロセスはEmacsにより入力が送信されたときに入力を受信して、それはこのセクション内の関数で行われます。これを行うには入力を送信するプロセスと送信するための入力データを指定しなければなりません。サブプロセスがプログラムを実行していたら、データはプログラムの標準入力として出現します。接続にたいしては、データは接続されたデバイスかプログラムに送信されます。

オペレーティングシステムにはptyのバッファーされた入力にたいして制限をもつものがいくつかあります。それらのシステムでは、Emacsは他の文字列の間に定期的かつ強制的にEOFを送信します。ほとんどのプログラムにたいして、これらのEOFは無害です。

サブプロセスの入力はテキストをファイルに書き込むときと同じように、通常はサブプロセスが受信する前、コーディングシステムを使用してエンコードされます。どのコーディングシステムを使用するかを指定するにはset-process-coding-systemを使用できます(Process Informationを参照)。それ以外の場合には、非nilならcoding-system-for-writeがコーディングシステムとなり、さもなくばデフォルトのメカニズムがコーディングシステムを決定します(Default Coding Systemsを参照)。

入力バッファーが一杯でシステムがプロセスからの入力を受け取ることができないことがあります。これが発生したときには送信関数はしばらく待機してからサブプロセスの出力を受け取って再度送信を試みます。これは保留となっている更なる入力を読み取ってバッファーに空きを作る機会をサブプロセスに与えます。これはフィルター、センチネル、タイマーの実行も可能にするのでコードを記述する際はそれを考慮してください。

以下の関数ではprocess引数はプロセス、プロセス名、またはバッファー、バッファー名(get-buffer-processで取得されるプロセス)、nilはカレントバッファーのプロセスを意味します。

Function: process-send-string process string

この関数はstringのコンテンツを標準入力としてprocessに送信する。たとえばファイルをリストするShellバッファーを作成するには:

(process-send-string "shell<1>" "ls\n")
     ⇒ nil
Function: process-send-region process start end

この関数はstartendで定義されるリージョンのテキストを標準入力としてprocessに送信する。

startendが、カレントバッファー内の位置を示す整数かマーカーでなければエラーがシグナルされる(いずれかの大小は重要ではない)。

Function: process-send-eof &optional process

この関数はprocessが入力内のEOF (end-of-file)を見ることを可能にする。EOFはすべての送信済みテキストの後になる。この関数はprocessをリターンする。

(process-send-eof "shell")
     ⇒ "shell"
Function: process-running-child-p &optional process

この関数はprocessが接続ではない実際のサブプロセスであり、端末の制御を自身の子プロセスに与えたかどうかを示す。これが真なら関数はprocessのフォアグラウンドプロセスグループの数値ID、これが真ではないとEmacsが判断すればnilをリターンする。これが真かどうかをEmacsが判断できなければ値はtprocessがネットワーク接続、シリアル接続、pipe接続、またはサブプロセスが非アクティブなら関数はエラーをシグナルする。