/sys에서 데이터를 읽는 데 더 안전한 방법은 무엇입니까?

/sys에서 데이터를 읽는 데 더 안전한 방법은 무엇입니까?

다양한 하드웨어 구성 요소의 온도를 모니터링하는 프로그램을 작성하려고 합니다.

제가 선택한 언어는 Java입니다. 이제 온도를 읽는 두 가지 방법이 있습니다.

a) cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_inputJava로 하나 만드십시오.Process process = Runtime.getRuntime().exec("cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input");

b) File포인터를 만들고 파일을 /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input열어 BufferedReader온도를 읽습니다.

첫 번째는 이상해 보입니다. 실제로 파일이 어디에 있는지 알 준비가 되었을 때 다른 프로그램을 호출하여 파일을 읽고 내용을 인쇄합니다.

두 번째 생각은 BufferedReaderLinux 커널이 매초마다 파일을 업데이트하고 7초마다 파일을 열려고 시도할 때 문제가 발생할 수 있는지에 대한 생각이었습니다.

이러한 방법 중 어느 것이 더 현명한지에 대한 통찰력을 찾고 있습니다.

답변1

성능 및 이식성 이유로(아래 참조) 옵션 B가 선호되는 솔루션이므로 파일의 전체 내용을 한 번에 읽을 것입니다.

문자열 내용 = new Scanner(new File("파일 이름")).useDelimiter("\Z").next();

(따라서스택 오버플로 답변)

존재하지 않는 파일로 인해 발생하는 I/O 오류를 처리하고 0바이트일 때 파일을 읽어야 합니다. 시간).


옵션 A는 결국 2개의 하위 프로세스를 생성하게 됩니다. 먼저 셸을 생성한 다음 예상할 수 있는 cat 명령을 시작하는 해당 프로세스에 명령줄을 전달합니다. 프로그램을 실행하는 프로세스에 이상한 경로 환경 변수가 있는 경우 cat을 실행하지 못하거나 예상치 못한 작업을 실행할 수 있습니다. 이는 여전히 시스템에 따라 달라지는 전체 경로(일반적으로 /bin/cat)를 사용하여 완화할 수 있습니다.

일반적으로 다른 선택의 여지가 없는 한 외부 프로세스를 생성하지 않는 것이 가장 좋습니다.

관련 정보