問題タブ [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++ - Linux C++ で PTY を取得する最も簡単な方法
Bash へのインターフェースが必要なものをプログラミングしています。最初は popen か QProcess を使えばいいと思っていました。(私はQT C++を使用しています)それらは正常に動作しますが、パスワードを受け入れるためにtty / ptyを必要とするsudoのようなものを使用する場合に必要なttyでBashを実行することはできません。
GNU 標準 C ライブラリで forkpty()、openpty() などを見つけましたが、対応するマンページを読んでも、それらの使用方法や適切な例を見つけることができませんでした。文字通り、私のプログラムのこの部分で行う必要があるのは、/bin/bash を実行している tty から読み書きできることだけです。それは本当に簡単ですか、それとも目に見える以上のものがありますか?
もしそうなら、誰でもこれを行う方法について簡潔な例を提供できますか? 前もって感謝します!編集:これが私が思いついたヘッダーファイルです!
c++ - forkpty が呼び出されると、X はエラーをスローします。(C++)
私のプログラムがこの行に到達すると:
これを出力します:
そして終了します。ご覧のとおり、何かを実行するために pty を作成しようとしていますが、うまくいきません。
また、forkpty()
クラス内で呼び出す方法はありますか? (両方の方法を試しましたが、どちらもうまくいきませんでした。)
Ubuntu 9.10 で QT C++ でプログラミングしています。
編集:これは、最終的に機能したコードを含む質問へのリンクです。
c++ - ファイル記述子からの Read() がハングする
ねえ、うまくいけば、これが私の PTY 関連の最後の質問になるはずです。もっとエキサイティングな問題に移ることができます。(c;
pty の作成と読み書きのために私が書いた一連の小さな関数を次に示します。 http://pastebin.com/m4fcee34d 唯一の問題は、それらが機能しないことです。初期化子と writeToPty( "ls -l" ) を実行した後、readFromPty からの「出力」はまだ空です。
Ubuntu、QT C++
編集済み:わかりました、読み取りループを除いて、このすべてが機能することを確認できます。デバッガーの [locals/watchers] タブでは、QString の「出力」が実際に正しいデータを取得することを示していますが、その後 ( read() ) 出力から文字が不足して実行され、ハングします。どうすれば修正できますか? ありがとう!(c:
編集:これは、最終的に機能したコードを含む質問へのリンクです。
c - 作成された疑似端末から子プロセスを読み取ることができません
疑似端末を使って、パスワードでSSHにログインできるアプリを書こうとしています。しかし、マスターデバイスにwrite()を実行すると、データはどういうわけかスレーブデバイスに表示されません。簡単なテストケースは次のとおりです。
アプリは最初に「Enterキーを押してバイトを送信します」と出力します。Enterキーを押した後、子プロセスのread()が戻ることを期待しています。しかし、マスターのwrite()が成功したとしても、そこにあるread()は無期限にブロックされるように見えるため、マスターはwaitpid()を永久に待機します。どうしたの?
linux - Linuxでのソフトウェアシリアルポートループバック
現在、シリアル回線を介してCiscoデバイスと通信するプログラムを開発する必要があります。開発用のLinuxマシンでテスト環境を構築したいと思います。だから、私はdynamipsciscoエミュレーターを見つけました。このエミュレータは、「-U / dev/ttyS0」オプションを使用してシリアル回線を介してインターフェイスを提供できます。これにより、ダイナミプスはハードウェアのシリアルポートを開き、それを介して通信します。minicomなどのシリアルクライアントを使用して、別のLinuxマシンからこのハードウェアシリアルポートに接続できます。
ただし、両方のLinuxマシンでvirtualboxを使用しているため、virtualbox機能を介してシリアルポートをリンクし、シリアルポートを名前付きパイプに転送します。このスキームは機能しているようですが、非常に冗長です。単一のLinuxマシンでdynamipsとminicomを実行する方法を探しています。
私の場合、疑似端末が役立つ可能性があることがわかりました。しかし、「-U / dev / ptmx」を使用してdynamipsを実行してから、minicomに接続して/ dev / pts/...ポートを作成しようとしました。その逆も同様です。どちらの場合も、両側で入出力エラーが発生します。
c - Ctrl-C 制御文字または端末ハングアップ メッセージを子プロセスに送信する方法は?
疑似端末で実行される子プロセスがあります。親プロセスは root として実行されませんが、子プロセスは su または sudo を介して実行されます。このため、子プロセスにシグナルを送信して強制的に終了させることはできません。次のいずれかの方法で強制的に終了させたい:
- Ctrl-C をエミュレートします。
- 端末のハングアップをエミュレートします。
これらのいずれかを行うにはどうすればよいですか? 私はすでに pty master fd を持っており、次のようなことを試しました:
しかし、それは何もしません。
c - forkpty - ソケット
新しいソケット接続でプログラムを実行する必要がある単純な「telnet/server」デーモンを開発しようとしています。この部分は正常に動作しています。
しかし、新しいプロセスを pty に関連付ける必要があります。これは、このプロセスにはいくつかの端末機能 (readline など) があるためです。
私が開発したコードは次のとおりです (socketfd は、新しい入力接続の新しいソケット ファイル記述子です)。
そのコードでは、「prgName」の stdin / stdout / stderr ファイル記述子がソケットに関連付けられているため (ls -la /proc/PID/fd で検索した場合)、このプロセスの端末機能は機能しません。 .
リモート デバイスで ssh/sshd を介して接続し、「localy」(ssh 接続で) prgName を実行するテストでは、このプロセス「prgName」の stdin/stdout/stderr fd が pty に関連付けられていることが示されます (したがって、このプロセスの端末機能は正常に動作しています)。
私が間違っていることは何ですか?自分の socketfd を pty (forkpty で作成) に関連付けるには?
感謝
アレックス
ruby - RubyでPTY.spawn呼び出しをどのように強制終了しますか?
rubyのptyクラスを使用してこのようなコマンドを実行した場合、特定の入力文字列が見つかった場合、どうすればそれを強制終了できますか?
それを行う正しい方法は何ですか?
c - minicom または screen を介して pty とどのように通信しますか?
いくつかのハードウェアに AT/Modem のようなインターフェイスを提供しようとしています。この投稿に続いて、openpty() を使用してサーバーに pty を設定しています。
これで、スレーブを開き、read() および write() 呼び出しを介して通信するクライアント アプリを使用して、期待どおりにサーバーと通信できるようになりました。
ただし、screen コマンドまたは minicom のいずれかを使用して、コマンドを手動でスレーブに発行できるようにしたいと考えています。ただし、これを実行しようとすると、サーバーはデータを受信しないようです。このアプローチで欠けている重要なものはありますか?
c - ptyから読む
Linuxで(Unix 98スタイルの)疑似ttyを使用してメッセージを受信(write(1)
および後で処理)したいのですが。wall(1)
私はすでに次の最小限の実装を持っています:
問題は、最初のメッセージを読み取るためだけに機能し、次に読み取るとEIOエラーが発生することです。何故ですか?