首页 > 代码库 > 通过gpio控制一个进程开启或关闭

通过gpio控制一个进程开启或关闭

目标: 板子上有个进程需要通过读取gpio的值, 当gpio值为1 时, 开启指定的进程,当gpio为0时, 杀掉这个指定的进程。

#include <stdio.h>int main(){    FILE *pfile;    while (1){      const char * FILEPATH = "/sys/class/gpio/gpio26/value";      pfile = fopen(FILEPATH, "r");      if (pfile == NULL)      {        printf("Open Error\n");        exit(0);      }      char buf[100];      fgets(buf, 100, pfile);
    //cvalue 保存读取到的gpio文件的值,0或者1   
char cvalue = http://www.mamicode.com/buf[0];   char command[150];   char bufresult[10];    int count = 0;   FILE * fp;
    //这里的command中grep mjpg_streamer是过滤出mjpg_streamer进程,grep -v \"grep\" 是去掉grep自身的进程   sprintf(command,
"ps | grep mjpg_streamer | grep -v \"grep\"");    if((fp = popen(command, "r")) == NULL)    {     printf("popen error\n");     exit(0);    }
     // popen操作需要时间,sleep一下    sleep(
1);
     // 当没有mjpg_streamer进程时,bufresult读取结果会为NULL。此时将count置为0,表示没有mjpg_streamer进程在运行   
if( (fgets(bufresult, 10, fp)) != NULL )    {      count = atoi(bufresult);    }    else    count = 0;    printf("count = %d\n", count); if( count == 0 && cvalue =http://www.mamicode.com/= 1) {
       // 当gpio 为1时,count为0时,表示没有mjpg_streamer进程在运行,并且需要开启这个进程,调用进程启动脚本
//启动脚本里写,cd /目录, ./程序 --参数
   system(
"/modbustest/startmjpgstreamer.sh");
       //程序启动需要时间,sleep一下   sleep(
2);   printf("Start OK!\n");    } else if ( count != 0 && cvalue =http://www.mamicode.com/= 0) {
      //count不为0表示有mjpg_streamer进程,cvalue =http://www.mamicode.com/= ‘0‘ 表示指令要求杀掉进程, 调用killall命令
   system("killall mjpg_streamer");   printf("Kill OK!\n");    }    else printf("count = %d , cvalue = http://www.mamicode.com/%c/n", count ,cvalue);    pclose(fp);    fclose(pfile);   sleep(1); } return 0;}

 

通过gpio控制一个进程开启或关闭