zhouu 发表于 2018-8-30 07:46:29

linux下C调用shell命令

  linux下C调用shell命令的方法基本有两个,一个是用system命令,另外一个是用popen方法。 popen(char* commond,char *type)会调用fork()产生 子历程,然后从子历程中调用/bin/sh -c来履行 参数command的指令。如果想把shell命令的结果保存到变量中就要用popen方法。下面是我写的一个在进程启动后两分钟后做相应操作的简单示意。其中用到了popen方法,以及一些常用的shell命令(如cut)。
  #include
  #include
  #define SHUTDOWNTIME   120   // shutdown OS 2 minutes later
  void sig_child(int signo)
  {
  pid_t      pid;
  int      stat;
  //处理僵尸进程
  while ((pid = waitpid(-1, &stat, WNOHANG)) >0)
  printf("child %dterminated.\n", pid);
  }
  void GetTime(int *ps32Time)
  {
  char acCmdStr;
  char acTemp;
  FILE *fp;
  int i;
  signal(SIGCHLD,sig_child);
  for(i = 0; i < 3; i++)
  {
  sprintf(acCmdStr,"%s%d","date | cut -d\" \" -f 4 | cut -d: -f ",i + 1);
  fp = popen(acCmdStr,"r");
  fgets(acTemp,sizeof(acTemp),fp);
  *(ps32Time + i) = atoi(acTemp);
  }
  pclose(fp);
  }
  int main()
  {
  int s32StartTime;
  int s32CurTime;
  int s32TimeInterval = 0;
  GetTime(s32StartTime);
  while(1)
  {
  GetTime(s32CurTime);
  s32TimeInterval = (s32CurTime - s32StartTime) * 3600 + (s32CurTime - s32StartTime) * 60 + s32CurTime - s32StartTime;
  if(s32TimeInterval < 0)
  {
  s32TimeInterval += 24 * 3600;
  }
  if(s32TimeInterval > SHUTDOWNTIME)
  {
  printf("It's time to shutdown OS!\n");
  exit(0);
  }
  sleep(60); // sleep 60s
  }
  return 0;
  }

页: [1]
查看完整版本: linux下C调用shell命令