[안드로이드] 리눅스 커맨드를 실행하고 결과값을 받아오기
(SELinux 상태 확인하기)
Viper4Android Installer 앱을 만들면서 SELinux의 상태를 확인하는 부분을 넣으면서 리눅스 커맨드를 실행, 결과값을 받아와야했다. ProcessBuilder만으로는 실행은 가능하나 결과를 반환할 수 없었기 때문에 BufferReader를 이용하였다.
ProcessBuilder를 이용해 커맨드를 실행하고 BufferReader를 이용해 결과값을 받아올 수 있다.
예시
뜬금없지만 아래는 완성된 코드예시이다.
1 2 3 4 5 6 7 8 9 10 11 | public static String SelinuxStatus() { String line = null; try { Process p = Runtime.getRuntime().exec(“getenforce”); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); line = br.readLine(); return line; } catch (Exception e) { return null; } } | cs |
요약하자면,
SelinuxStatus()를 실행하면 (Process) p가 "getenforce"
명령어를 실행하고, (BufferedReader) br이 (String) line에 p를 실행하고나서의 결과값을 입력한다.
내가 썼지만 무슨 말을 하는지 모르겠다. 그냥 한줄한줄 읽어보자.
설명
line 2 > String line;
문자열 line을 초기화한다. getenforce
명령어를 실행하면 결과값이 문자열로 나오기 때문에 문자열로 초기화하였다.
line 4 > Process p = Runtime.getRuntime.exec(“getenforce”);
“getenforce”라는 명령어를 가져와서 실행한다는 뜻이다. 설정 앱의 휴대전화 정보 (또는 태블릿 정보)에서도 SELinux 상태를 확인할 수 있다.
참고로 “setenforce” 명령어는 SELinux 상태를 변경할 수 있다.
ex) setenforce 0 또는 setenforce 1
line 5 > BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferReader가 프로세스 p의 실행 결과를 받아오도록 초기화, 실행한다.
line 6 > line = br.readLine();
br이 읽은 결과 값을 line에 저장한다.
line 7 > return line;
문자열 line을 반환한다.
line 9 > return null;
try문을 실행도중 에러가 발생시 catch문에서 null을 반환한다.
주요 부분
line 4 > Process p = Runtime.getRuntime.exec(“getenforce”);
line 5 > BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
line 6 > line = br.readLine();
'Tip > Develop' 카테고리의 다른 글
[C#] 시리얼 통신 시, 수신 이벤트가 두번 이상으로 들어올 경우 (1) | 2017.02.06 |
---|---|
[C#] WPF 프로그램의 노티바(시스템 트레이) 아이콘 생성 (0) | 2017.02.06 |
[C#] WinForm 프로그램의 노티바(시스템 트레이) 아이콘 생성 (0) | 2017.02.06 |
[안드로이드] Snackbar(스낵바) 사용하기 (0) | 2016.01.07 |
안드로이드 프로그래밍 - 1. 기초 (0) | 2015.12.22 |