2008-12-04 3 views
8

OS 버전, 하드 디스크 공간, 사용 가능한 디스크 공간, C++의 Linux 시스템에 RAM을 설치하는 것과 같은 정보를 얻으려고합니다. 내가 system() 다른 리눅스 명령을 실행하고 (현재 내가 뭘하는지 그들의 출력을 캡처 사용할 수 있습니다)하지만 더 좋은 방법이 있는지 궁금 해서요? 운영 체제에서 정보를 얻는 데 사용할 수있는 C++ 표준 라이브러리가 있습니까?C++에서 시스템 정보를 읽으려면 어떻게해야합니까?

답변

12

시스템을 통해 * nix 명령을 사용하는 경우.

맨 페이지 맨 아래로 스크롤하면 대개 관련 C 시스템 호출과 관련된 메시지가 표시됩니다.

Example: man uname: 
SEE ALSO 
     uname(2), getdomainname(2), gethostname(2) 


Explanation of numbers: 

(1): User UNIX Command 
(2): Unix and C system calls 
(3): C Library routines 
(4): Special file names 
(5): File formats 
(6): 
(7): 
(8): System admin commands 

따라서 시스템 ("uname")을 사용하는 경우. 맨 페이지에서 uname C 시스템 호출 (uname (2))이 있음을 알 수 있습니다. 그래서 이제는 C 시스템 호출 uname을 사용하는 방법에 대한 정보를 얻기 위해 'man 2 uname'을 할 수 있습니다.

+2

잡음을 처리 할 수 ​​있다면 기존 시스템 프로그램 (응용 프로그램)을 strace 할 수도있다. 예 : "strace uname -a"이 명령은 해당 프로그램에서 작성한 모든 시스템 호출을 표시합니다. 올바른 시스템 호출을 찾고 자신의 프로그램에서 동일한 루틴을 호출 할 수 있습니다. –

+0

당신은 내가 시스템의 출력 ("df")을 파싱 할 필요가 없다는 것이 얼마나 행복 할 지 모른다. 고마워. :) –

5

이러한 목적으로 C++ 표준 라이브러리에는 아무 것도 없습니다. 사용할 수있는 라이브러리는 libhal으로, 프로그램보기를 하드웨어로 추상화하여 /proc, /sys 등의 다양한 정보를 수집합니다. HAL 아래로 스크롤하면 비공식적 인 C++ 바인딩도 사용할 수있는 것 같습니다 (libhal은 C++ 프로그램에서도 잘 작동하지만 테스트하지는 않았습니다). HAL에서 사용할 수있는 모든 장치 정보를 표시하려면 lshal 명령을 사용하십시오.

2

litb에서 제안한대로 HAL을 사용하고 싶지 않다면 시스템에있는 /proc filesystem에서 바로 읽을 수 있습니다. 이것은 플랫폼 독립적 인 일을하는 방식이 아니며 많은 경우 파일을 골라 내려면 약간의 구문 분석이 필요합니다.

나는 HAL이 이러한 많은 세부 사항을 추상화한다고 생각하지만 라이브러리를 사용하는 것이 옵션이 아니라면/proc에서 바로 읽을 수 있다는 것을 알고있다.

2

시스템 정보는 정의 할 수 없으므로 표준 솔루션이 없습니다. 가장 좋은 방법은 대부분의 작업을 수행하는 라이브러리를 사용하는 것입니다. 하나의 크로스 플랫폼 라이브러리 (hal과 달리 현재 Linux에만 해당)는 SIGAR API이며 오픈 소스 BTW입니다. 나는 C++ 프로젝트에서 많은 문제없이 사용했다. (설치가 약간 비표준이지만 쉽게 알아낼 수있다.)

관련 문제