C ++でシステム情報を読み取るにはどうすればよいですか?
-
19-08-2019 - |
質問
OSバージョン、ハードディスク容量、利用可能なディスク容量、C ++でLinuxシステムにインストールされたRAMなどの情報を取得しようとしています。 system()
を使用してさまざまなLinuxコマンドを実行し、それらの出力をキャプチャできることは知っています(これは私が現在行っていることです)。オペレーティングシステムから情報を取得するために使用できるC ++標準ライブラリに何かありますか?
解決
システム経由で* nixコマンドを使用している場合。
次に、manページの一番下までmanスクロールすると、通常、関連する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
したがって、system(<!> quot; uname <!> quot;)を使用している場合。 manページから、uname Cシステムコール(uname(2))もあることがわかります。したがって、「man 2 uname」を実行して、Cシステムコールunameの使用方法に関する情報を取得できます。
他のヒント
これらの目的のためのC ++標準ライブラリには何もありません。使用できるライブラリはlibhal
です。これは、プログラムのビューをハードウェアに抽象化し、/proc
、/sys
などからさまざまな情報を収集します。 HAL 、下にスクロールすると、非公式のC ++バインディングも利用できるようです(haven ' tはそれをテストしましたが、libhalはC ++プログラムでも動作します)。コマンドlshal
を使用して、HALで利用可能なすべてのデバイス情報を表示します。
litbが示唆するように HAL を使用したくない場合は、 から直接読んでください。 / procファイルシステム(システムにある場合)。これは最もプラットフォームに依存しない方法ではなく、多くの場合、ファイルを分解するために少し解析する必要があります。
HALはこれらの詳細の多くを抽象化していると思いますが、ライブラリの使用がオプションでない場合は、/ procから直接読むことができることを知っているだけです。
システム情報は定義上、移植性がないため、標準的なソリューションはありません。最善の策は、ほとんどの作業を行うライブラリを使用することです。そのようなクロスプラットフォームライブラリの1つ(現在Linux固有のhalとは異なります)は、 SIGAR API です。 、これはオープンソースのBTWです。あまり問題なくC ++プロジェクトで使用しました(インストールは少し非標準ですが、簡単に理解できます)