非同期サブプロセスは、Emacsから入力が送信された際にそれを受け取ります。この処理は、本節で説明する関数を用いて行われます。入力を送信するプロセスと、送信する入力データを指定する必要があります。サブプロセスがプログラムを実行する場合、データはそのプログラムの標準入力に現れます。接続の場合は、データは接続先のデバイスまたはプログラムに送信されます。
一部のオペレーティングシステムでは、ptyにおけるバッファリングされた入力用の領域が限られています。こうしたシステムでは、Emacsは他の文字の合間に定期的にEOFを送信し、強制的に処理させます。ほとんどのプログラムにとって、これらのEOFが悪影響を及ぼすことはありません。
サブプロセスへの入力は、通常、ファイルに書き込まれるテキストと同様に、サブプロセスが受け取る前に符号化方式を用いて符号化されます。使用する符号化方式を指定するには
set-process-coding-system を使用できます(プロセス情報 を参照)。それ以外の場合、符号化方式は、coding-system-for-write が nil
でないときはそこから、そうでない場合はデフォルト設定メカニズム(デフォルト符号化方式 を参照)から決定されます。
入力バッファが一杯であるため、システムがそのプロセスへの入力を受け付けられないことがあります。このような場合、送信関数は短時間待機してサブプロセスからの出力を受け付けた後、再度試行します。これにより、サブプロセスは保留中の入力をさらに読み込み、バッファに空きを作る機会を得られます。また、フィルター(現在実行中のものを含む)やセンチネル、タイマーの実行も可能になります。コードを記述する際は、この点に留意してください。
これらの関数において、process
引数にはプロセスまたはプロセス名、あるいはバッファまたはバッファ名(get-buffer-process を介してプロセスを表す)を指定できます。nil は現在のバッファのプロセスを意味します。
この関数は、stringの内容をprocessとして標準入力に送信します。nilを返します。例えば、Shellバッファでファイルを一覧表示するには:
(process-send-string "shell<1>" "ls\n")
⇒ nil
この関数は、start と end で定義された領域内のテキストを、process に標準入力として送信します。
start と end がともに整数であるか、あるいは現在のバッファ内の位置を指定するマーカーである場合を除き、エラーが報告されます。(どちらの数値が大きいかは問いません。)
この関数は、process が入力内でファイル終端を認識するようにします。EOF は、すでに送信された任意のテキストの後に現れます。この関数は process を返します。
(process-send-eof "shell")
⇒ "shell"
この関数は、接続ではなく実際のサブプロセスである process
が、そのターミナルの制御権を自身の子プロセスに譲渡したかどうかを判定します。これが真である場合、関数は process のフォアグラウンドプロセスグループの数値IDを返します。Emacs
がそうでないと確信できる場合は、nil を返します。Emacs
が真であるかどうかを判定できない場合は、値は t となります。process
がネットワーク、シリアル、またはパイプ接続である場合、あるいはサブプロセスがアクティブでない場合、この関数はエラーを通知します。