0

私の友人には以下の割り当てがあります。誰でも「C」でこれを行う方法をガイドできますか。ガイドだけで十分です。

すべてのプロセスリストをファイルに保存し、すべてのプロセスをUIDでソートするプログラムを作成します。

例えば:

./a.out processidlist.txt

情報をprocessidlist.txtに保存する必要があります。

このprocessidlist.txtでは、UIDを使用してプロセスを並べ替える必要があります。

彼は以下を試しました

ps –A –o UID > outputfile

ありがとう

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] )
{
  FILE *fp1, *fp2;
  FILE *fp;
  int status;
  char path[1035];

   fp1 = fopen( argv[1], "w" );
   if ( ! fp1 )
   {
      printf("Error opening file %s\n", argv[1]);
   }

  /* Open the command for reading. */
  fp = popen("ps -Af | sort -k1", "r");
  if (fp == NULL) {
    printf("Failed to run command\n" );
    exit;
  }

  /* Read the output a line at a time - output it. */
  while (fgets(path, sizeof(path)-1, fp) != NULL) {
    printf("%s", path);
    fputs( path, fp1 );
  }

  /* close */
  pclose(fp);
  fclose(fp1);
  return 0;
}
4

2 に答える 2

2

これらの行の何かが機能するはずです

system("ps -Af | sort -k1");

A indicates all processes
f generates full listing
k denotes sort by column
1 denotes first column which is UID of the processes

そして、迷惑なヘッダーが必要ない場合

UID        PID  PPID  C STIME TTY          TIME CMD

プロセスリストとともに、出力sedの最初の行を削除するために使用しますps

system("ps -Af | sed "1 d" | sort -k1");
于 2012-04-10T06:20:07.050 に答える
1

質問のコンテキストを提供する必要があります。すなわち、あなたに教えようとしている宿題は何ですか?

すべてのプロセスをチェックするために学習している特定のAPIはありますか?(したがって、あなたがそれを使用することが期待されていると賢明に推測することができます)。

そうでない場合は、Pavanのsystem()呼び出しのようなものが機能する可能性があります。(しかし、1行のシェルスクリプトで解決できるのに、なぜCプログラムを作成するように求められたのですか?)

また、質問へのコメントの「ps」-具体的にはプログラムを作成することを示しているのに、なぜ「彼」はpsコマンドラインが適切であると考えたのでしょうか。

于 2012-04-10T06:29:39.720 に答える