OS 버전, 하드 디스크 공간, 사용 가능한 디스크 공간, C++의 Linux 시스템에 RAM을 설치하는 것과 같은 정보를 얻으려고합니다. 내가 system()
다른 리눅스 명령을 실행하고 (현재 내가 뭘하는지 그들의 출력을 캡처 사용할 수 있습니다)하지만 더 좋은 방법이 있는지 궁금 해서요? 운영 체제에서 정보를 얻는 데 사용할 수있는 C++ 표준 라이브러리가 있습니까?C++에서 시스템 정보를 읽으려면 어떻게해야합니까?
답변
시스템을 통해 * 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'을 할 수 있습니다.
이러한 목적으로 C++ 표준 라이브러리에는 아무 것도 없습니다. 사용할 수있는 라이브러리는 libhal
으로, 프로그램보기를 하드웨어로 추상화하여 /proc
, /sys
등의 다양한 정보를 수집합니다. HAL 아래로 스크롤하면 비공식적 인 C++ 바인딩도 사용할 수있는 것 같습니다 (libhal은 C++ 프로그램에서도 잘 작동하지만 테스트하지는 않았습니다). HAL에서 사용할 수있는 모든 장치 정보를 표시하려면 lshal
명령을 사용하십시오.
litb에서 제안한대로 HAL을 사용하고 싶지 않다면 시스템에있는 /proc filesystem에서 바로 읽을 수 있습니다. 이것은 플랫폼 독립적 인 일을하는 방식이 아니며 많은 경우 파일을 골라 내려면 약간의 구문 분석이 필요합니다.
나는 HAL이 이러한 많은 세부 사항을 추상화한다고 생각하지만 라이브러리를 사용하는 것이 옵션이 아니라면/proc에서 바로 읽을 수 있다는 것을 알고있다.
시스템 정보는 정의 할 수 없으므로 표준 솔루션이 없습니다. 가장 좋은 방법은 대부분의 작업을 수행하는 라이브러리를 사용하는 것입니다. 하나의 크로스 플랫폼 라이브러리 (hal과 달리 현재 Linux에만 해당)는 SIGAR API이며 오픈 소스 BTW입니다. 나는 C++ 프로젝트에서 많은 문제없이 사용했다. (설치가 약간 비표준이지만 쉽게 알아낼 수있다.)
- 1. Objective-c에서 텍스트 파일을 읽으려면 어떻게해야합니까?
- 2. Objective-C에서 런타임에 클래스 정보를 얻으려면 어떻게해야합니까?
- 3. HttpServletReponses 출력 스트림을 읽으려면 어떻게해야합니까?
- 4. Java를 통해 시스템/하드웨어 정보를 얻으려면 어떻게해야합니까?
- 5. iOS 용 Objective-C에서 오디오 파일의 속성을 읽으려면 어떻게해야합니까?
- 6. C에서 stdio.h를 사용하여 단어별로 파일 단어를 읽으려면 어떻게해야합니까?
- 7. Objective-C에서 iTunesMetadata.plist를 읽으려면 어떻게해야합니까? (ipa 파일이 디스크에 있음)
- 8. Windows XP 및 Windows 7에서 시스템 오디오 출력을 읽으려면 어떻게해야합니까?
- 9. .inf 파일을 읽으려면 어떻게해야합니까?
- 10. HttpResponse에서 bytearray를 읽으려면 어떻게해야합니까?
- 11. Node.js에서 파일을 읽으려면 어떻게해야합니까?
- 12. Ruby로 파일을 읽으려면 어떻게해야합니까?
- 13. .pls 파일을 읽으려면 어떻게해야합니까?
- 14. J2ME에서 문자열을 읽으려면 어떻게해야합니까?
- 15. CodeIgniter에서 QueryString을 읽으려면 어떻게해야합니까?
- 16. JavaScript로 XML을 읽으려면 어떻게해야합니까?
- 17. 파일에서 입력을 읽으려면 어떻게해야합니까?
- 18. Silverlight에서 BitmapImage에서 픽셀의 색을 읽으려면 어떻게해야합니까?
- 19. ASP.NET 2.0에서 HttpResponse를 읽으려면 어떻게해야합니까?
- 20. 파일에서 특수 문자를 읽으려면 어떻게해야합니까?
- 21. Java의 파일에서 숫자를 읽으려면 어떻게해야합니까?
- 22. WPF에서 base64 이미지를 읽으려면 어떻게해야합니까?
- 23. 웹 서비스에서 데이터를 읽으려면 어떻게해야합니까?
- 24. SAS 데이터 세트를 읽으려면 어떻게해야합니까?
- 25. Unix에서 디렉토리를 파일로 읽으려면 어떻게해야합니까?
- 26. wfstream에서 이진 데이터를 읽으려면 어떻게해야합니까?
- 27. Winform에서 키보드 입력을 읽으려면 어떻게해야합니까?
- 28. Java에서 그래프의 좌표를 읽으려면 어떻게해야합니까?
- 29. 모든 피드 항목을 읽으려면 어떻게해야합니까?
- 30. 서버 로그 파일을 읽으려면 어떻게해야합니까?
잡음을 처리 할 수 있다면 기존 시스템 프로그램 (응용 프로그램)을 strace 할 수도있다. 예 : "strace uname -a"이 명령은 해당 프로그램에서 작성한 모든 시스템 호출을 표시합니다. 올바른 시스템 호출을 찾고 자신의 프로그램에서 동일한 루틴을 호출 할 수 있습니다. –
당신은 내가 시스템의 출력 ("df")을 파싱 할 필요가 없다는 것이 얼마나 행복 할 지 모른다. 고마워. :) –