您的位置:首页 > 博客中心 > 网络系统 >

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

时间:2022-04-03 09:39

目标: 板子上有个进程需要通过读取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 = 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 == ‘1‘) {
       // 当gpio 为1时,count为0时,表示没有mjpg_streamer进程在运行,并且需要开启这个进程,调用进程启动脚本
//启动脚本里写,cd /目录, ./程序 --参数
   system("/modbustest/startmjpgstreamer.sh");
       //程序启动需要时间,sleep一下   sleep(2);   printf("Start OK!\n");    } else if ( count != 0 && cvalue == ‘0‘) {
      //count不为0表示有mjpg_streamer进程,cvalue == ‘0‘ 表示指令要求杀掉进程, 调用killall命令
   system("killall mjpg_streamer");   printf("Kill OK!\n");    }    else printf("count = %d , cvalue = %c\n", count ,cvalue);    pclose(fp);    fclose(pfile);   sleep(1); } return 0; }

 

本类排行

今日推荐

热门手游