char []から値を取得する方法

しかし、私を助けてくれている皆さん、ありがとう。 / proc/pid/statusからVmRSSの値を取得したい、以下はコードです

int main()
{ 
    const int PROCESS_MEMORY_FILE_LEN = 500;
    FILE *file;
    std::string path("/proc/4378/status");
    //path += boost::lexical_cast( pid );
    //path += "/status";
    if(!(file = fopen(path.c_str(),"r")))
    {
        std::cout <<"open " << path<<"is failed " << std::endl;
        return float(-1);
    }
    char fileBuffer[PROCESS_MEMORY_FILE_LEN];
    memset(fileBuffer, 0, PROCESS_MEMORY_FILE_LEN);
    if(fread(fileBuffer, 1, PROCESS_MEMORY_FILE_LEN - 1, file) != (PROCESS_MEMORY_FILE_LEN - 1))
    {
        std::cout <<"fread /proc/pid/status is failed"<< std::endl;
        return float(-1);
    }

    fclose(file);

    unsigned long long memoryUsage = 0;
    int a = sscanf(fileBuffer,"VmRSS: %llu", &memoryUsage);
    std::cout << a << std::endl;
    std::cout << memoryUsage << std::endl;
}

ようやく、ありがとう

1
私はchar []を持っています、データは "a:1 \ nb:2 \ nc:3 \ n ..... n:n \ n VmRSS:4"です。 ;私はVmRssの価値を得たいと思う。それが私の問題です。
追加された 著者 yetuweiba,
私はちょうどテストコードです、私はちょうどsscanf function.yesをテストしたい、コードはstictではない、私はあなたの助言に感謝、次回修正する。
追加された 著者 yetuweiba,
あなたは何を求めているのですか?スタックオーバーフローでは、特定の質問をするか、具体的な推奨事項を探す必要があります。
追加された 著者 Randall Cook,
あなたの正確な問題は何ですか?私たちはあなたのコードを進めません。
追加された 著者 Sebastian Dressler,
そのプロセスはどのようなプロセスですか?あなたがプログラムのために取得する場合は、常に実行の間に変更されるので、PIDをハードコードすることはできません。
追加された 著者 Some programmer dude,
また、なぜC ++と古いstdio関数を混ぜているのですか?なぜ main から浮動小数点数を返すのですか?
追加された 著者 Some programmer dude,

1 答え

あなたのコメントに基づいて:あなたの文字配列内の VmRSS を見つけるには、 C ++アルゴリズム a>をC ++ 文字列ライブラリと組み合わせて使用​​します。次に、 VmRSS の位置を取得します。必要な結果を取得するだけです。これらのエントリの構造を少し知っていれば、これは簡単な作業です。

それに加えて、文字列に直接読み込むために fstream を使用する方が良いかもしれません。

0
追加された