• ベストアンサー

Solarisの実装メモリ容量を得るシステムコール(ライブラリコール)

Solarisではコマンドラインでは、prtconfをすると実装メモリ容量を得ることが出来ますが、これと同じ情報(実装メモリ容量だけでいいです)をCやC++のプログラムから、システム(ライブラリ)コールを呼ぶことで得る方法を知っている方教えてください。 ちなみに、Linuxでは、/proc/meminfo の中に実装メモリ容量が書かれているので、このファイルをopen / read / close してやれば解決するのですが....Solarisにはどうもこういった便利なファイルが見当たりません....。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.1

sysconf(3C)を使用し、sysconf(_SC_PAGESIZE)とsysconf(_SC_PHYS_PAGES)の結果から計算。 _SC_PAGESIZE   : System memory page size _SC_PHYS_PAGES : Total number of pages of physical memory in system truss(1)でprtconf(1M)をトレースした結果とtopコマンドのソースを見た限りでは、上記方法で計算しているみたいだけど。

hjoshua
質問者

お礼

どうもありがとうございました。sysconfを使ってプログラムしたところ、同様の結果を得ることが出来ました。

関連するQ&A

  • システムコールと標準ライブラリの正しい使い方を教えて下さい

    システムコールって何でしょうか。 C言語初心者なので、変な質問だったら、すみません。 システムコールと標準ライブラリにおける、関数の違いを教えて頂けませんでしょうか。 例えばファイル入出力で用いる openとfopenは何が違うのでしょうか? 私はそもそも、システムコールというものが判っていない状態です。 いつも標準ライブラリを参考にしていたものですから・・。 更に似た使い方をすると思いますが、使える範囲等どちらが広いのでしょうか。 よろしくお願いします。

  • Linux上で動くシステムでリソースを監視する方法

    Linux上でCで組んだプログラムで、CPU使用率、メモリ使用率、ディスク使用率を取り込んで使用率が高い場合はエラーを返すような処理を行わせたいと思っているのですが、どういった方法を用いればこういったデータを入手することはできるのでしょうか? また一般的にはどういった方法で実装されるのでしょうか? 現時点では、メモリとCPUに関してはproc/statやproc/meminfoに格納されているようなのでそこから取り出せるのではないかと思っているのですが、ディスク使用率はちょっと想像がつかないもので… 基本的にツールなどは使わずに実装したいのですけど、実現する方法はありますでしょうか? よろしければ教えていただけると幸いです。

  • メモリやHDDの容量の表示が微妙に違うのはなぜか

    コントロールパネルの設定から確認したメモリ(実装RAM)の容量と、コマンドプロントの「systeminfo」で確認した容量が微妙に違うのはなぜですか? また、HDDの容量も違うのは同じ理由でしょうか? コントロールパネルの実装RAM ⇒ 8.00GB コマンドプロントの「systeminfo」物理メモリ合計 ⇒ 8,110 MB コントロールパネルのストレージ ⇒ 238GB コマンドプロントの「fsutil volume diskfree c:」バイト総数 ⇒ 254721126400

  • 実装メモリと使用可能メモリについて、教えて下さい。

    DELLのDIMENSION9200Cでマザーボードに実装メモリを5G付けています。でもマイコンピュータのプロパティを見ると「2.99G使用可能」となっています。どうすれば、メモリの容量を増やす事が出来るのでしょうか?出来れば最低4Gは欲しいです。環境はWIN7 Ultimate SP1です。ご回答宜しくお願い致します。

  • ディスクの空き容量を取得するシステム関数はありますか?

    ディスクの空き容量を取得するシステム関数はありますか? dfコマンドで、ディスクの空き容量を取得できますが、 このdfコマンドに相当するシステム関数はありますでしょうか? やりたいことは、例えば、/etc/varのディレクトリの空き容量がどれくらいあるかを取得したい ということです。 dfコマンドにより上記は、実現出来ますが、直接C言語から呼び出すことが可能なシステム関数があれば と思い質問しました。 上記に該当するシステム関数がない場合はsystem関数を使用してdfを実行する予定ですが、それは最後の手段と考えています。 OSはintel版solarisで使用する予定ですが、linux前提でもかまいません。

  • Solaris(SPARC)のファイルシステムについて

    dfコマンドでディスクスライスを参照した場合、 ファイルシステムで"c0t0d0s0"って表示されますが、 『c,t,d,s』って、それぞれどんな意味なんですか? "s"はスライスのような気はするのですが…。 #df -k ファイルシステム kbytes 使用済み 使用可能 capacity マウント先 /proc 0 0 0 0% /proc /dev/dsk/c0t0d0s0 1015909 491317 463638 52% / /dev/dsk/c0t0d0s1 1015909 798691 156264 84% /usr fd 0 0 0 0% /dev/fd /dev/dsk/c0t0d0s3 1015909 529819 425136 56% /var /dev/dsk/c0t0d0s4 1015909 904926 50029 95% /opt swap 5037840 1998296 3039544 40% /tmp

  • Linux/Windowsのシステムコール

    CentOS 5.5 + Eclipse CDT で C++ のプログラミングを始めたばかりです。 プログラムを作成するにあたって、今後 Windows へ移植したときに移植しやすいプログラムを作成したいと考えています。 (現段階ではまだ標準出力に何か表示するお粗末なものですが) 素人考えでは、システムコールを使用すると他プラットフォームへ移植したときに同等のシステムコールがないと実装を大きく変更しなければならなくなるので、あらかじめどれが固有のシステムコールかを判断したいと思っています。 例えば Linux では待ち行列を実現するのに mkfifo システムコールが使えるけど、Windows では使えないから待ち行列をあらかじめロジックで実現しよう、という感じです。 (あくまで例なので、Windows の FIFO の API を使えばいいじゃん、というのはナシで) なので、Linux および Windows でシステムコール一覧を参照する方法を教えて頂きたいです。 まあ、STLでもプラットフォームが変われば動く保証はないみたいなので、Javaみたいなクロスプラットフォームのようにはいかないと思いますが。。。 よろしくお願いします。

  • バイナリファイルの分割

    バイナリファイルを指定したファイル容量に分割するようなコマンドはあるのでしょうか? あるいはそのようなことをしたい場合、どのようにしたらよいのでしょうか? SolarisでもLinuxでもかまいません。因みにWindowsではJdivideというツールがありますが、これに似た機能が提供されているようなコマンドを探しております。

  • 実行中のプロセスのシステムコールフックについて

    表題の通り,実行中のプロセスのシステムコールのフックについて質問があります. 現在,Linux上の全てのプロセスがどんなシステムコールを使って,どんなリソースにアクセスをしているのか調査しているのですが 具体的には以下のURLのソフトと同じものを,Linux上でC言語を用いて作りたいと考えています. [Process Monitor] http://www.microsoft.com/technet/sysinternals/utilities/processmonitor.mspx いろいろ調べていく中で strace http://www.netadmintools.com/html/1strace.man.html を使うと目的としている調査が実装できそうだということでさっそくいじってみたのですが, strace では既に実行されているプロセスのシステムコールの呼び出しをトレースすることはできないようでした. そこで1点質問なのですが,既に実行中のプロセスのシステムコールをフックするにはどのような方法を使えばいいのでしょうか. お分かりになるかたご回答よろしくお願いします. こちらの開発環境は以下です. OS: Debian 4.0 Kernel: 2.6.20-16 gcc: 4.1.2 (3つとも11/9現在の最新版を使用しています)

  • 処理中メッセージの文字が表示されない

    【処理概要】作表するダータをCSVファイルへ書き込み、後にEXECELファイルへ貼り付けし、印字する処理。 【事態】CSVファイルへの書き込み前に、「只今作票中です。しばらくお待ち下さい。」のメッセージをボックスに編集したが、IO処理にメモリが取られボックスだけが表示されメッセージ文字が編集されない事態が生じています。 回避策をお教え願います。 【スペック概要】 Frm_Msg.Lbl_ViewMsg.Caption = "只今作票中です。し              ばらくお待ち下さい。" Frm_Msg.Show Syorisw = 1 'CSVファイルオープン Call CSVout DB_Open 'DBオープン Call DB_Read 'DBを読みレコード出力 Call DB_Close 'DBクローズ Syorisw = 9 'CSVファイルクローズ Call CSVout Frm_Msg.Hide 以降 プレビューして印字処理する。