私は、オペレーティングシステム上のプロセスには3つの標準ストリームがあるという印象を受けましたstdin, stdout, and stderr
。また、vimのようなテキストエディタは、入力を引き継いstdin
でANSIエスケープ文字を送信することで機能すると思いましたstdout
。ただし、この1つのケースでは、コマンドラインインタープリターがどのように機能していないかについての私の見解は次のとおりです。
コマンドを実行すると、次のC:\cygwin\bin\bash.exe
プロンプトが表示されます。
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\masson>C:\cygwin\bin\bash.exe
bash-3.2$
...しかし、次のスニペットを使用してJavaで実行すると、stdinストリームは空になります。
ProcessBuilder pb = new ProcessBuilder("C:\\cygwin\\bin\\bash.exe");
pb.redirectErrorStream(true);
Process proc = pb.start();
final InputStream in = proc.getInputStream();
new Thread(new Runnable() {
public void run() {
// Blocks forever...
in.read(new byte[1024]);
}
}).start();
ここで何が起こっているのですか?bash.exeがインタラクティブモードで実行されていると言われました。これは、標準ストリームが使用されていないことを意味しますか?これらのプログラムを引き続き使用するにはどうすればよいですか。また、最終的には、独自のバージョンのcmd.exeを実装するにはどうすればよいですか。コマンドラインインタプリタがどのように機能するかについて、基本的なことを理解していないと思います...
(関連する主題について説明している記事へのリンクをいただければ幸いです。検索する運があまりありませんでした。最後の質問ですが、Windowsでは標準ストリームの扱いがほとんどのUnixライクなオペレーティングシステムとは異なりますか?)