2011-01-10 5 views
10

Imシステム情報(パーティションスペース/フリー、ノートパソコンのバッテリー情報など)のさまざまなビットを収集して送信するためにアプリで作業しています。私はこの情報を直接のC++ APIの形で得ることは大成功ではありません。しかし、すべての利用可能なファイルは/ proc(または同様のもの)にあります。Linux C++:apis vs/procファイル?

私のC++アプリケーションでこれらのファイルの読み取り/解析がこの情報を取得する適切な方法かどうか、あるいはAPIを発見しようとする必要がありますか? (注:私はstatvfsで作業しています)。

これまでのところ、この種の情報をWin32で収集する方が簡単です。奇妙に思える。

+0

それぞれのファイルを解析する方法については、procinfoソースにヒントがあります。http://svn.tabris.net/repos/procinfo-ng/trunk/ – pmr

答えて

7

だったが

+1

Linuxでは多くの情報が/ proc以外のインタフェースはありません。そして、バージョン変更のために、バージョンIDを含む*/proc出力に注意を払う。そして、マルチカラム/ procの出力では、将来的にはそれ以上のカラムが得られないと想定していません! –

+0

それで、私はそれを行く場所のリストに含めました。 – DigitalRoss

+1

+1しかし正しいシステム固有の方法で '/ proc'を使うリポジトリの'/proc'ユーティリティの上に 'procps'、' systune'、 'linuxinfo'のように追加します。 – darvids0n

0

ご存じのように、多くのLinuxシステム情報は/procにあります。そして、その情報を取得するためのC APIがないことは間違いありません(C++の代わりにbashを使う傾向がある場合は、通常はシェルコマンドがあります)。ワーストケースのシナリオでは、/procを解析しているかもしれませんが、必要な特定の項目のオープンソースシェルコマンドの形式でサンプルコードを入手できる場合があります。その/ procは以下の優先順位でAPIに固執するはるかによってベストプラクティスあるAPI(すべてがファイルです...)

+0

"知っている人"が "そこにはないそれのための刺すような 'APIはありません。それが正しいと思われるものなら、さまざまなファイルを解析することには問題ありません。 – ethrbunny

+0

@ jyeargersほとんどのタスクにはstickin 'APIはありません。オープンソースプロジェクトのサンプルコードは、通常、前方への道です。 (または単に 'strace'をエミュレートするシェルコマンドを実行して、必要なファイルがあればそれを開きます) – chrisaycock

1

私は。

  • あなたの言語のAPI(ここではあなたのためではない多くの助けが、C99の文字列関数は、POSIXのか、他のOS標準で指定されたライブラリの文字列機能を使用するより優れている、文字列を言う。)

  • のPosixで動作するソフトウェアのAPIドキュメント化

  • カーネルAPIの

  • 文書化されていないカーネルAPI(彼らが変更された場合、少なくともこれらは、たとえば、ioctlのユーザーを中断しますので、彼らはおそらく変更されません)

  • /proc

  • /dev/kmem/dev/mem

/procトローリングは、リリースからリリースまでのポータブルあるいは同じになると信じる理由はありません。どのシステムにも/procがマウントされているわけではありません!

すべてのことを言って、それははるかに簡単にはちょうど/procのオフのものをこすり取る際には、それが唯一の可能なインターフェイスだならば、あなたは先に行くとit.qaに最後に

、の順序付けを使用する必要がありますです死後のカーネルクラッシュダンプ解析では/procが利用できないため、最後の2つは完全には明確ではありませんが、コアダンプでピークを検出できるツールは引き続き動作します。