/*
* 練習問題23.1 p.590
* plugTogetherメソッドを作成しなさい。スレッドを使用する必要があるでしょう。
*/
package ch23.ex23_01;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
public class Plug
{
static Thread inToOut;
static Thread outToIn;
// 親プロセスの標準ストリームを子プロセスの標準ストリームに結びつけます
// その結果、ユーザがタイプした文字は指定されたプログラムへ送られて、
// プログラムの出力はユーザに見えるようになります
public static Process userProg(String cmd) throws IOException
{
Process proc = Runtime.getRuntime().exec(cmd);
plugTogether(System.in, proc.getOutputStream());
plugTogether(System.out, proc.getInputStream());
plugTogether(System.err, proc.getErrorStream());
return proc;
}
// 2つのストリームを結合するためのメソッド
public static void plugTogether(InputStream in, OutputStream out)
{
class PlugThread implements Runnable
{
// int b;
String s;
InputStream in;
BufferedReader br;
OutputStream out;
BufferedWriter bw;
PlugThread(InputStream a_in, OutputStream a_out)
{
in = a_in;
out = a_out;
br = new BufferedReader(new InputStreamReader(in));
bw = new BufferedWriter(new OutputStreamWriter(out));
}
public void run()
{
while(true)
{
try
{
// while ((b = in.read()) != -1)
while ((s = br.readLine()) != null)
{
// out.write(b);
bw.write(s);
System.out.println(s);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
}
PlugThread plugThread= new PlugThread(in, out);
inToOut = new Thread(plugThread);
inToOut.start();
}
// 2つのストリームを結合するためのメソッド
public static void plugTogether(PrintStream out, InputStream in)
{
class PlugThread implements Runnable
{
PrintStream out;
BufferedReader br;
String line;
PlugThread(PrintStream a_out, InputStream a_in)
{
out = a_out;
br = new BufferedReader(new InputStreamReader(a_in));
}
public void run()
{
while(true)
{
try
{
while((line = br.readLine()) != null)
{
out.println(line);
}
}
catch(Exception e)
{
out.println(e);
}
}
}
}
PlugThread plugThread = new PlugThread(out, in);
outToIn = new Thread(plugThread);
outToIn.start();
}
public static void main(String[] args)
{
try
{
// Plug.userProg("ping -n 3 127.0.0.1");
// Plug.userProg("sort.exe");
// Plug.userProg("notepad.exe");
Plug.userProg("cmd.exe");
}
catch(Exception e)
{
System.out.println(e);
}
}
}