C 将所有进程列表存储到具有UID的文件中

C 将所有进程列表存储到具有UID的文件中,c,C,我的朋友有一个下面的作业,任何人都可以在“C”中指导如何做,只要指导就足够了 编写一个程序将所有进程列表存储到一个文件中,并使用UID对所有进程进行排序 例如: ./a.out processidlist.txt 它必须将信息保存到processidlist.txt 在此processidlist.txt中,它必须使用UID对进程进行排序 他试过下面的方法 ps –A –o UID > outputfile 谢谢 #include <stdio.h> #include &l

我的朋友有一个下面的作业,任何人都可以在“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;
}
#包括
#包括
int main(int argc,char*argv[])
{
文件*fp1,*fp2;
文件*fp;
智力状态;
字符路径[1035];
fp1=fopen(argv[1],“w”);
如果(!fp1)
{
printf(“打开文件%s\n时出错”,argv[1]);
}
/*打开命令进行读取*/
fp=popen(“ps-Af | sort-k1”,“r”);
如果(fp==NULL){
printf(“无法运行命令\n”);
出口
}
/*一次读取一行输出-输出它*/
while(fgets(path,sizeof(path)-1,fp)!=NULL){
printf(“%s”,路径);
fputs(路径,fp1);
}
/*接近*/
pclose(fp);
fclose(fp1);
返回0;
}

这些行中的某些内容应该是有效的

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");

这方面的一些东西应该有用

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");

你需要提供问题的背景。i、 家庭作业想教你什么

您是否一直在学习一种特定的API来检查所有流程?(因此,我们可以明智地假设,人们期望您使用它)

否则,类似Pavan的
system()
调用可能会起作用。(但如果用一行shell脚本解决了C程序,为什么还要编写它呢?)


另外:问题评论中的“ps”-它明确地说写一个程序,那么为什么“他”认为ps命令行是足够的呢?

您需要提供问题的上下文。i、 家庭作业想教你什么

您是否一直在学习一种特定的API来检查所有流程?(因此,我们可以明智地假设,人们期望您使用它)

否则,类似Pavan的
system()
调用可能会起作用。(但如果用一行shell脚本解决了C程序,为什么还要编写它呢?)


另外:问题评论中的“ps”-它明确地说写一个程序,那么为什么“他”认为ps命令行是足够的?

他尝试了下面的命令,但它不能工作ps–a–o UID>outputfile他尝试了下面的命令,但它不能工作ps–a–o UID>outputfilepavan,你的意思是我们可以直接使用c语言中的lin程序,如果你在Linux上运行,那么是的
system
执行命令就像我们在Shell中执行一样你是说使用你在c程序中给出的行,你能像我在问题中问的那样像c程序一样更改你的代码吗。在这之后,正如您已经展示的,将输出重定向到
processidlist.txt
pavan,我可以做上面提到的一个答案吗,它有24个up points pavan,您的意思是我们可以直接在c程序中使用lin如果您在Linux上运行,那么是的
system
执行命令就像我们在Shell中执行一样你是说使用你在c程序中给出的行,你能像我在问题中问的那样像c程序一样更改你的代码吗。之后,如您所示,将输出重定向到
processidlist.txt
pavan,我可以做上面提到的一个答案吗,它有24个上升点谢谢,那么我认为我们不应该使用系统命令,还有其他简单的方法吗,老师建议了什么/直接在文件系统上运行proc?libproc?谢谢,那么我认为我们不应该使用系统命令,还有其他简单的方法吗?老师有什么建议吗/直接在文件系统上运行proc?libproc?