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