問題タブ [tty]
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.
linux - / dev/ttyへの直接リダイレクトをキャッチする
/ dev/ttyに直接テキストを吐き出すプログラムのアプリケーションコントローラーに取り組んでいます。
これは、端末に送信されるすべてのテキストをキャッチできる必要がある実稼働アプリケーションコントローラーです。通常、これは問題ではありません。stdoutとstderrをリダイレクトするだけです。この特定のアプリケーションは、echoを直接呼び出し、結果を/ dev / tty(echo "some text" > /dev/tty
)にリダイレクトしています。アプリケーションコントローラを介したリダイレクトでテキストをキャッチできません。
私はこのアプリケーションのソースを持っていますが、それを変更する立場にはなく、もう維持されていません。出力をキャッチおよび/または破棄する方法についてのアイデアはありますか?
c - *nix 疑似端末はどのように機能しますか? マスター/スレーブ チャネルとは何ですか?
Linux システムの C 言語で、シンプルで馬鹿げた X ターミナル エミュレータを作成したいと考えています。
最初は、シェルを開いてその出力を表示する必要があると思っていました。xterm と rxvt のコードを調べたところ、もう少し複雑に見えます。
まず、openpty で疑似端末を開く必要があります。そこで、man ページを見て、openpty がマスターとスレーブの 2 つのファイル記述子を埋めていることを確認します。xterm と rxvt のコードはどちらも、これらの特殊ファイルがシステムに依存しているため、厄介です。
私はtermiosのことを理解しています:それは端末のエスケープコードに関する情報の集まりです。私が本当に得られないのは、マスター/スレーブファイル記述子で何をすべきかということです。
ターミナルを開いてログインし、シェルで「ls」を実行するサンプルプログラムは素晴らしいでしょう。
(英語は私の母国語ではありません。私の最終的な間違いを許してください)
編集:これが私が思いついたサンプルコードです:
unix - ksh: 標準入力をプローブする方法は?
stdin を介して受信するものがあるかどうかに応じて、ksh スクリプトの動作が異なるようにします。
私のスクリプトは他のスクリプトから呼び出されるため、stdin が端末 [ -t 0 ] であるかどうかを確認することは役に立ちません。
「cat <&0 >./tmp.dat」を実行して tmp.dat のサイズをチェックすると、stdin が「空」の場合、stdin からの EOF を待ってハングアップします (2 番目のケース)。
標準入力が「空」かどうかを確認する方法は?!
c - Linux で root プログラムから tty デバイスへの排他的アクセスを取得する
Linux で root として実行され、tty (実際には tty として実装された LCD) と通信するプログラムがあります。価値のあるデバイスは /dev/ttyUSB0 です。同時に実行されているプログラムの他のインスタンスから干渉されないように、このデバイスに書き込むプログラムがデバイスに排他的にアクセスできるようにしたいと考えています。
TIOCEXCL ioctl が発行されない限り、同じファイルへの複数の open() 呼び出しが成功することを意味するデバイスの追加のオープンを防止する TIOCEXCL と呼ばれる ioctl オプションがあることがわかります。これにより、ルート所有プロセス以外による追加のオープンが防止されます。 " これをテストしたところ、宣伝されているとおりに動作します。root 以外のユーザーが /dev/ttyUSB0 を開こうとすると (パーミッションを変更したら)、「デバイスがビジー状態」などで失敗し、root ユーザーが開こうとすると失敗します。 、 できます。
私が理想的に望んでいるのは、この tty への排他的アクセスを root ユーザーのために機能させる方法です。そのため、複数の root ユーザーが LCD に書き込むプログラムを使用することになりますが、どういうわけか彼らの LCD (tty) へのアクセスはシリアル化されます。どうやら TIOCEXCL ioctl オプションは、root ユーザーが既に開いている tty デバイスを開くのを止めないので、私にはうまくいきません。
ここには多くのオプションがあると思いますが、他の考えや提案があるかどうかを確認するために、すべての人に連絡しています.
たぶん、TIOCEXCLの使用について何かが欠けています...
open() や ioctl() などを介して排他的アクセスを取得する方法が他にあるかもしれません。
他のプロセスがデバイスを開いていることを検出できる方法があれば、待ってから再試行できます。私は lsof について知っていますが、これを学ぶためだけにこのプログラム内から呼び出すのは嫌です。そして、それには競合条件があります。(多分私はそれを乗り越えることができますか?:))
tty デバイスへの排他的アクセスを取得するために使用されていたように、ロックを実装できます。
更新 1:
LCD デバイスに書き込むプログラムは私のものだけなので、次のようなコード (疑似コード) を実行してコード内にロックする傾向があります。
macos - Mac OS X の Ctrl-Alt F1 および Alt-F1...F6 の TTY スイッチ
出来ますか...
- キーバインディング用の端末モードを持つCtrl+ Alt+F1
- Alt+ F1...の TTY を切り替えるにはF6
Ubuntu には、異なる TTY 間を移動するための上記のコマンドがあります。
Mac では有効化されていないようです。
Mac で上記の機能を有効にするにはどうすればよいですか?
linux - Linux の /dev/tty デバイスでのユーザー ブレーク (UART ブレーク) の処理
ここにいくつかのコード サンプルがありますが、問題は、'putty' を使用してシリアル ライン上で 'break' が送信されたときに、シグナル ハンドラが呼び出されないことです。
ここに私のstty設定があります:
何が足りないのですか / 信号を受信できないのはなぜですか? USB-2-Serial コンバーターを使用しており、ブレークが送信されていることがわかりますが、このクライアント エンドでは何もトリガーされません。
c - プロセスは、バックグラウンドになったことをどのように認識しますか?
ファイルを scp すると、^Z で停止してバックグラウンドに置くことができます。バックグラウンドにある場合、進行状況の印刷は停止しますが、コピーは続行されます。もう一度フォアグラウンドにすると、印刷が再開されます。それはどのように知っていますか?シットトゥ?それは標準の ptty で起こりますか?
unix - 出力の読み取りと入力への書き込みのための疑似ttyを作成する方法
私はfork()とexecvp()を使用して、プロセスが正しく機能するために対話型端末に接続されていると信じる必要があるプロセスを生成しています。
スポーンしたら、プロセスからのすべての出力をキャプチャし、プロセスに入力を送信できるようにします。
psuedo-ttysがここで役立つのではないかと思います。誰かがこれを行う方法についてのスニペットを持っていますか?
linux - どのttyファイルがどのUSB-シリアルデバイスを指しているかをどのように把握できますか?
ftdi_sioドライバーを使用してUSBでLinuxボックスに接続された2台のレガシーマシンが/dev/ttyUSB0
あり/dev/ttyUSB1
ます。Linuxボックスは、マシン間のトラフィックを中継および分析しています。Linuxボックスが起動すると、マシンはほぼランダムにファイルに接続されます。問題は、どれがどれであるかを知ることです。
もちろん、デバイスに質問することもできますが、間違ったデータを間違ったデバイスに送信することによる誤動作のリスクを回避したいと思います。たとえば、ttyファイルに接続されているデバイスのIDを把握する方法はありますか?