問題タブ [pty]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - マスター pty は、スレーブ tty が終了したかどうかをどのように検出できますか?
サブシェルの実行を実装するために、BSD スタイルの pty/tty ペアを使用しています。ユーザーがサブ シェルを終了するとき、これが発生したことをマスター プロセスで検出するにはどうすればよいですか? select(nfds, &read_fds, NULL, NULL, &timeout); を使用しています。マスター側の read_fds にマスター pty ファイル記述子を設定します。
c - マスター側からの疑似 tty エコー モードの変更
Linux では、マスター側で疑似 tty を開いています。スレーブ側にはクライアントがありませんが、疑似 tty は私が彼に書き込んでいるすべてのものをエコーしているように見えますが、これは私が期待しているものではありません。次のコードを検討してください。
このプログラムを実行すると、読み取り呼び出しがブロックされることを期待しますが、代わりにすぐに返され、readbuf の内容は C になります。この動作を変更するにはどうすればよいですか? スレーブ側が開かれていない場合、マスター側に書かれた文字は消えるか、後でスレーブ側で読み取れるようにファイフォされます。
マスター側の属性を変更するのは正しい方法ですか?
ruby - Ruby - Expect と Pty の問題
サーバーに ssh 接続し、特定のコマンドを実行し、そこから出力を取得する Ruby スクリプトを作成しようとしています。これは私がこれまでに得たもので、主にプログラミングRubyの本から改作されています:
残念ながら、私が戻ってきたのはこれだけです:
私が何を間違っていたのか、これを軽減する方法はありますか?
linux - Linuxでxtermの-Sオプション(疑似端末名と記述子を渡す)はどのように機能しますか?
あいさつ、古いSolaris2.4コードをCentOS5.3に移植しているときに、次のような呼び出しに遭遇しました。
ここで、%sは00、01のような2文字の数字シーケンスXXであり、%dは数値ファイル記述子です。これは明らかにxtermに/dev/ ttypXX(疑似端末スレーブ)を使用するように指示する方法でしたが、コードは対応するマスターを開き、代わりにpipe(2)を呼び出し、書き込みfdを%d置換として渡すことを気にしないようです。その上。Solarisでは、スポナーからこのwrite fdに書き込むと、出力がxtermの子に表示されます。ちなみに、strace(1)では、/devの下で何かを開こうとする試みは見られませんでした。
ssh - 「ssh」の popen() で fgets() を呼び出すと、呼び出しプロセスの stdin の先頭がフラッシュされます (ptty 問題)
私はこれを最小限のテストケースに落とし込みました。これまでのところ、これは ssh のパイプで発生する疑似端末に関連する問題であると判断できました。'-t -t' を ssh 呼び出しに追加すると、問題が発生するために fgets() への 2 回目の呼び出しが必要になるという点で改善されました。sshコマンドのstderr出力が何らかの形で問題に関与していると思われます。今のところ、実行するsshコードでstderrをstdoutにリダイレクトしました。「tcgetattr: Invalid argument」エラーが問題の一部であるかどうかは疑問ですが、それを取り除く方法がわかりません。-t -t が存在することから来ているようです。-t -t は正しい方向に進んでいると思いますが、何らかの方法で stderr の疑似端末をセットアップする必要があり、おそらくテストは適切に機能しますか?
メイクファイル:
test.c ソース ファイル:
これは、通過する方法を実行していることを示しています。
これは、失敗した方法で実行されていることを示しています。
c - プログラムを変更せずに stdout からバッファリングされていない出力をキャプチャする方法は?
プログラムを実行するためのユーティリティを作成しています。プログラムからバッファリングされていない stdout と stderr をキャプチャする必要があります。する必要がある:
- stdout と stderr を別々のファイルにキャプチャします。
- 出力をバッファリングしない (または行バッファリングする) 必要はありません。
- 実行中のプログラムのソースを変更せずに。
問題は、出力をファイルにパイプするときに、stdout ストリームがライン バッファーではなくブロック バッファーになることです。プログラムがクラッシュした場合、出力はフラッシュされず、空白になります。したがって、バッファリングなしで (または行バッファリングを使用して) stdout をキャプチャする必要があります。
これは pty で実行できると思いますが、私が望むことを正確に実行する例を見つけるのに苦労しています (ほとんどは stderr を無視します)。実際、C で pty の例をまったく見つけたことがあるかどうかはわかりません。ほとんどは、Python の pty および subprocess モジュールのような高レベルのインターフェースを使用します。
誰でも(コードスニペットまたはリンクで)助けてもらえますか? どんな助けでも大歓迎です。
編集:私はそれを解決したと思います。次の 2 つのリンクは非常に役に立ちました。
- http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.bpxbd00/posixopenpt.htm
- http://www.gidforums.com/t-3369.html
私のコードはリポジトリとして利用できます:
bash - 標準入力経由の矢印キー
stdin を介して矢印キーを bash に送信しようとしています。
猫 | 猫 | /ビン/バッシュ
次に、「echo hi」と入力します => 「hi」がコンソールに表示されます (もちろん、引用符はありません)。次に、矢印キーを上に押します => ^[[コマンドが見つかりませんでした
stdin を介して矢印キーをプログラムに送信することは可能ですか?
私が尋ねている理由は、別のプログラムから bash を制御したいからです。矢印キーをbashに送りたい
python - Python: pty.fork() と os.fork() をいつ使用するか
アプリから外部バックグラウンド プロセスを生成するときに使用するかどうかがpty.fork()
わかりません。os.fork()
(チェスエンジンなど)
端末でアプリを生成する場合と同様に、親が強制終了された場合に、生成されたプロセスが終了するようにします。
2 つのフォークの間の浮き沈みは何ですか?
c - Cで実行時にコマンドラインプログラムと対話(stdin / out)
私がやりたいのは、sftp(1)をラップするGUI/コマンドラインと呼ばれることだと思います。そのプログラムを起動し、実行中にその出力に反応する簡単な方法が必要です。さらに、入力を送信できる必要があります。完全な対話が必要です。
forkpty(エミュレートされたTTY)を試しましたが、そのジョブにforkptyを使用して見つけられる良い例はありませんでした。代わりに、引数とアドバイザリのオーバーフローに関するいくつかの警告がありました。これについてのもう一つの奇妙なことは、windowsize引数でした...
Cでコマンドラインプログラムを呼び出して操作する方法、またはsftpをiPhone GUIに統合する別の方法について、1つまたは複数の例を教えてください。