-2

私の質問は、私が非常に奇妙だと思うものです。実際、特定のプロセスのすべての子プロセスをリストしています。

このために、私は次を使用します:すべての子プロセスを見つけるには? そしてRCの答え。

しかし、unsigned long で終了する必要があります。そして、ソリューションはに基づいていくつかの文字列を提供しますchar[]

を取得したい場合はunsigned long、数値のみを取得するようにコードを変更する必要があります。他のケースは正しくありません。

だから私はcharasを入れましたunsigned long。次に、タグ付きscanf%ld

しかし、私はがらくたになっています...

なぜそれが機能しないのですか?

編集:コード:

const char *name = "top";
char command[100];
unsigned long parentID; unsigned long processID;

strcpy(command, "ps -C "); strcat(command, name); strcat(command, " --format '%P %p'");

FILE *fp = popen(command, "r");
    if (fp == NULL) fprintf(stderr, "Error in reading PID child processes information !\n");

while(fscanf(fp, "%lu %lu", parentID, processID) != EOF) {
    printf("PID : %lu Parent : %lu \n", processID, parentID);
}

return processID;

と、%sそしてchar[256]、この作品!

編集:Toughts

これを行うには、次の 2 つの方法を考えていました。

  • まず、unsigned longの代わりに使用しchar[]ます。
  • 次に、ファイルを読み取った後に変換char[]します。unsigned longただし、1行ずつ読む必要があります。で可能popenですか?
4

1 に答える 1

1

だから私はcharasを入れましたunsigned long。次に、タグ付きscanf()%ld

そして、ここであなたのプログラムは未定義の動作を呼び出します. for の型指定子unsigned long%lu.

(そしておそらく、あなたのコードには他にも私たちが伝えることのできないエラーがいくつかあります。戻り値を からchar *に変更することunsigned longは簡単なことではありません。)

于 2013-04-02T13:30:43.973 に答える