[그림 1] Data Flow of two process
[그림 2] OS 환경 값
[그림 3] 자바 환경 값
[그림 4] 썬 환경 값
[그림 5] Processor Flow
/* System Resource access program Program: getOS.java needs getOSM.java Summary: 환경 값을 출력 하는 자바 프로그램을 동작 시켜 그 결과를 얻어 온다. 자바의 많은 환경을 참조하고, 필요에 따라 그 값을 변경 할 수 있다. Author : 임영규 Date : 2003/3/1 */ import java.util.*; import java.io.*; class getOS { public getOS() { } public void result(String ag[]) { // 셀 환경을 하나 만든다.(OS측면에서는 하나의 Thread를 생성 함 Runtime run = Runtime.getRuntime(); // 수행할 프로세스를 지정한다. Process ps; String query = ag[0]; BufferedReader in; System.out.println("Result of Java Information ...... Lim.y.k Made"); // 게비지 콜렉터를 실행 합니다. run.gc(); // 메모리 량을 출력합니다. System.out.println("Free Mem = " + run.freeMemory() + "byte"); System.out.println("JVM total Mem = " + run.totalMemory() + "byte"); // 프로세스를 바로 잡기 위한 command 생성 String comm; if (query.equals("all")) comm = "java getOSM "; else comm = "java getOSM " + query; try { // 지정한 자바 프로그램(환경변수 출력 용)을 실행 함 // 생성한 Thread로 명령을 수행 함 ps = run.exec(comm); // System.out으로 나가는 출력을 입력으로 받아 들이기 위함 in = new BufferedReader(new InputStreamReader(ps.getInputStream())); int len = query.length(); String res,dat,result; // 출력 파일을 다 읽어 들임 while((res= in.readLine()) != null) { result=res; // 읽어들인 자료가 query보다 작으면 다음 라인 읽음 if (res.length() < len) continue; // Filtering 하기 위한 조건을 찾아 옮 // os, java, sun 등등, 그리고 출력 함 dat = res.substring(0, len); if (query.equals("all") || dat.equals(query)) System.out.println(result); } } catch(Exception e) { } } // Program entry point public static void main(String ag[]) { new getOS().result(ag); } }이것으로 우리는 표준 출력을 다른 파일의 입력 Stream으로 사용하기 위한 방법과 자바의 환경 값을 읽어 처리하는 방법에 대하여 알아보았다. 이제부터는 하나의 파일을 읽어 들여 이것을 곧바로 다른 파일로 ReDirection하는 방법을 알아보자. 이 방법은 콘솔 출력을 파일의 입력 Stream으로 바로 사용하기 위한 방법이다.
/* System Redirection make file with consol output ; It seems like file copy utility Program: Redirection.java Original : Thinking Java 2nd edition, p 604 Bruce Eckel President, Mindview, Inc Summary: 환경 값을 출력 하는 자바 프로그램을 동작 시켜 그 결과를 얻어 온다. 자바의 많은 환경을 참조하고, 필요에 따라 그 값을 변경 할 수 있다. Author : 임영규 Date : 2003/3/1 */ public class Redirction { public static void main(String arg[]) { // open a file Redirection.java BufferedInputStream in = new BufferedInputStream (new FileInputStream("Redirection.java"))); // open a file to write BufferedOutputStream in = new BufferedOutputStream (new FileOutputStream("Redirection2.java"))); // 입력과 출력을 표준 I/O로 지정하기 위하여 // System 클래스 참조 System.setIn(in); System.setOut(out); System.setErr(out); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s; while((s = in.readLine()) != null) System.out.println(s); // out을 출력 Stream으로 사용하기 위해 Setting했으므로 out.close(); }이로서 표준 출력을 다른 파일의 입력 Stream으로 사용하는 원리와 예제를 들어 보았다. 순수 PIPE 구현에 대한 연구는 다음 과제로 남긴다. 참고로 본 논문에서 사용한 Daemon 프로그램인 getOSM을 싣는다
/* System Resource Main access program Summary: 환경 값을 출력 하는 자바 프로그램을 동작 시켜 그 결과를 얻어 온다. 자바의 많은 환경을 참조하고, 필요에 따라 그 값을 변경 할 수 있다. Author : 임영규 Date : 2003/3/1 */ import java.util.*; import java.io.*; class getOSM { public getOSM() { } public void result(String ag[]) { String osName, osVersion, osArch; System.getProperties().list(System.out); /* reference programming below Standalone programming You Make { osVersion = System.getProperty("os.version"); osArch = System.getProperty("os.arch"); osName = System.getProperty("os.name"); System.out.println("OS : " + osName); System.out.println("OS ver : " + osVersion); System.out.println("OS CPU : " + osArch); } */ } // Absolutely Need main function, // which need that a single thread on exec method public static void main(String ag[]) { new getOSM().result(ag); } }
이전 글 : Advanced C# 10. 분할의 아름다움 - 재귀와 비재귀
다음 글 : 리눅스 전문가로부터 듣는 최고의 팁 !
최신 콘텐츠