Windows の従来のシリアル COM デバイスで最新のコンソール アプリケーションをホストする方法

Windows の従来のシリアル COM デバイスで最新のコンソール アプリケーションをホストする方法

編集:主な例を Zork Dungeon からデフォルトの OS シェルに変更しました。

最新のマシンでコンソール アプリケーションを実行しています。また、Super Serial Card を搭載した Apple //e も持っています。これにより、シリアル COM 接続を介してダム ターミナルとして機能できます (これ以上の詳細は役に立ちません)。USB シリアル ポートを使用して、これら 2 つのデバイスを問題なく接続できます。

最近のマシンでLinuxが起動している場合は、COM設定を構成し、デバイスファイルが属するグループに権限を与えることで、

$ bash </dev/ttyUSB1 >/dev/ttyUSB1 2>/dev/ttyUSB1

そして、Apple で bash セッションを取得します。Linux マシンはサーバーとして機能し、プログラムを実行しますが、入力と出力は単純なクライアントである Apple に送られます。これは、dungeon(Zork) などのより専用なプログラムでも機能します。

COMWindowsで同じことをするにはどうすればいいでしょうか?Windowsでは一度に1か所しかポートを開けないので、上記の解決策を正確に再現することはできません。上記のコマンドのWindows版を実行すると、

C:\> cmd <COM4 >COM4 2>COM4

アクセス拒否エラーが発生します。

COM ポートにデータを送信できます:

C:\> echo "Hello" >COM4

COM ポートから生の入力 (制御文字とエスケープ文字を含む) を読み取ります。

C:\> type <COM4

しかし、両方を同時に、同じプロセスまたは別のプロセスで実行することはできません。

PuTTY と RealTerm を使用しようとしましたが、どちらも Windows マシンからしか Apple を操作できませんでした。つまり、接続は機能しているものの、私が望んでいる方向とはまったく逆の方向になっています。接続された端末からアクセスできるように Windows コンソール アプリケーションをホストするにはどうすればよいですか?

答え1

編集:質問の明確化後に「再回答」

によるとマイクロソフトUsing command redirection operators( XP より新しい Windows のセクションが見つかりません):

ハンドルの複製

& リダイレクト演算子は、指定されたハンドルからの出力または入力を別の指定されたハンドルに複製します。たとえば、dir 出力を File.txt に送信し、エラー出力を File.txt に送信するには、次のように入力します。

dir>c:\file.txt 2>&1

ハンドルを複製すると、元のハンドルのすべての特性が複製されます。たとえば、ハンドルに書き込み専用アクセスがある場合、そのハンドルのすべての複製には書き込み専用アクセスがあります。読み取り専用アクセスのハンドルを書き込み専用アクセスのハンドルに複製することはできません。

良いニュースは次のとおりです。

  • <COM4 >COM4 2>COM4に変更できます<COM4 >&1 2>&1

悪いニュースは:

  • 読み取り専用<COM4と書き込み専用のハンドル アクセス要件が混在しており、に>&1 2>&1変更しています。Access DeniedThe handle could not be duplicated during redirection of handle 1

変更する場合:

  • <COM4 >&1 2>&1>COM4 2>&1 <&1読み取り専用と書き込み専用が混在したまま)これは機能し、使用可能なSTDOUTとを提供しますSTDERRが、STDINまだ壊れているようです。 (*)いくつかテストしてみましたが、STDINうまくいかないようです...

ただし、これを修正するための回避策が 1 つあります。

  • 使用com0comヌルモデムエミュレータ3 つの仮想ポート ペアを定義します。
    • COM_O-COM_O4のためにSTDOUT;
    • COM_E-COM_E4のためにSTDERR;
    • COM_I-COM_I4のためにSTDIN
  • 、、およびからhub4com.exe(com0com部分)のシリアルハブを作成します。COM_O4COM_E4COM_I4COM4

    • hub4com.exe --route=0:1 --route=2,3:0 --baud=19200 --data=8 --parity=no --stop=1 --octs=off --odsr=off --ox=off --ix=off --idsr=off --ito=0 \\.\COM4 \\.\COM_I4 \\.\COM_E4 \\.\COM_O4
    • 適切な(独自の)送信パラメータを設定することを忘れないでください: --baud...
  • そして<\\.\COM_I >\\.\COM_O 2>\\.\COM_Eコマンドラインを形成します。


最後に、

hub4com.exe --route=0:1 --route=2,3:0 --octs=off \\.\COM4 \\.\COM_I4 \\.\COM_E4 \\.\COM_O4

そして:

cmd <\\.\COM_I >\\.\COM_O 2>\\.\COM_E

Windows のコマンドラインがCOM4オンになっています19200 8N1...

関連情報