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


36.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が自身の子プロセスに端末の制御を与えたかどうかを告げるだろう。値tはそれが真であるか、あるいはEmacsがそれを告げることができないことを意味し、nilはなら偽であることをEmacsは保証します。