Cまたはbashで、
可能であれば、sshセッション内から、そのセッションのスレーブ(pts)への入力を担当する疑似端末マスターへのファイル記述子をどのように取得するのか疑問に思っていました。
シェル プロセスにはマスター ファイル記述子がなく、スレーブのみがあります。
シェルの親プロセス (sshd、xterm、screen など) は、getpt(3)
orを呼び出して新しいマスターを作成しposix_openpt(3)
ます。この関数は、マスター ファイル記述子を返します。grantpt(3)
親プロセスは、 、unlockpt(3)
、ptsname(3)
およびの組み合わせを呼び出して、スレーブ ファイル記述子を取得しますopen(2)
。これは Linux およびその他の POSIX 化されたシステム用です。他の *nix は他の機能を使用する場合がありますが、最終的な結果は同じです。親プロセスには、ファイル記述子のマスター/スレーブ ペアがあります。
次に、スレーブ記述子、およびスレーブ記述子のみが、標準入力、出力、およびエラーとしてシェルに渡されます。
UNIXベースのシステムでは、を開くことで現在のプロセスの制御端末を開くことができます/dev/tty
。多くの場合、プログラムはすでにこれをstdin、stdout、およびstderrとして開いていますが、プログラムがstdin、stdout、またはstderrをリダイレクトして呼び出されている場合でも/dev/tty
、プロセスの制御端末が提供されます。
Solaris 5.8 PTS(7D) マンページから - STREAMS 疑似 tty スレーブドライバー
Only one open is allowed on a master device.
私はそれが私の質問に答えると思います:)
編集:実際にはそうではありません.ファイル記述子を取得する方法があれば、もう一度開く必要はないので、ファイル記述子です笑、開く必要はありません