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 行 shell 脚本解决的,为什么要你写一个 C 程序呢?)

另外:关于问题的评论中的“ps” - 它专门说写一个程序,那么为什么“他”认为 ps 命令行就足够了?

于 2012-04-10T06:29:39.720 回答