C-stdヘッダには、システム、ユーザー、およびカーネル時間のヘルパー機能が含まれていますか?

C-stdヘッダには、システム、ユーザー、およびカーネル時間のヘルパー機能が含まれていますか?

デフォルトでは、Nvidiaの新しいgithubリポジトリを使用し、クロスプラットフォーム設定でコンパイルしたいと思います。特にFedora 33でコンパイルしようとしています。

問題が発生しました。

In file included from /home/chris/.../sample_example.cpp:55:
/home/chris/.../nvml_monitor.hpp:19:10: fatal error: cfgmgr32.h: No such file or directory
   19 | #include <cfgmgr32.h>
      |          ^~~~~~~~~~~

これはcfgmgr32.hWindows固有のライブラリのようです。

このファイルでは、nvml_monitor.hppほとんどのWindows機能を無効にできるようです。しかし、次のようなWindows関連の機能が役に立つと思います。

  float getCpuLoad()
  {
    static uint64_t _previousTotalTicks = 0;
    static uint64_t _previousIdleTicks  = 0;

    FILETIME idleTime, kernelTime, userTime;
    GetSystemTimes(&idleTime, &kernelTime, &userTime);

    auto FileTimeToInt64 = [](const FILETIME& ft) {
      return (((uint64_t)(ft.dwHighDateTime)) << 32) | ((uint64_t)ft.dwLowDateTime);
    };

    auto totalTicks = FileTimeToInt64(kernelTime) + FileTimeToInt64(userTime);
    auto idleTicks  = FileTimeToInt64(idleTime);

    uint64_t totalTicksSinceLastTime = totalTicks - _previousTotalTicks;
    uint64_t idleTicksSinceLastTime  = idleTicks - _previousIdleTicks;

    float result = 1.0f - ((totalTicksSinceLastTime > 0) ? ((float)idleTicksSinceLastTime) / totalTicksSinceLastTime : 0);

    _previousTotalTicks = totalTicks;
    _previousIdleTicks  = idleTicks;

    return result * 100.f;
  }

私が探しているのは、「仕事をする」人や何もしません。ただ始めるところや引き出す糸口だけです。

この問題空間でLinuxソリューションを検索すると、結果はシェルレベルの応答によって混乱します。しかし、代わりに私が探しているのは、Cこの情報を提供するインターフェースとハンドルのヘッダーです。

cfgmgr32.hWindowsのヘッダーと同様の目的を提供する特定のLinuxヘッダーはありますか?それ以外の場合、これらのヘッダーや機能を検索できる検索可能なLinuxカーネルリソースはありますか?

答え1

Linuxでは、この情報は次の場所にあります。/proc/statcpuライン、通常はそこから解析されます。同じ情報を提供するユーザー空間アクセス機能がないと思います。

この行の値は、ユーザーモードで費やされた時間、低い優先順位のユーザーモードで費やされた時間、システムモードで費やされた時間、アイドル操作で費やされた時間などを提供します。詳しくは上記のリンクをご覧ください。

たとえば、関数を使用して、現在のプロセスおよび/またはそのサブプロセスのタイミング情報を取得できます。POSIXgetrusageそしてtimes

関連情報