zoukankan      html  css  js  c++  java
  • 通过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
    ");
            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 ");     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 ", count); if( count == 0 && cvalue == '1') {
           // 当gpio 为1时,count为0时,表示没有mjpg_streamer进程在运行,并且需要开启这个进程,调用/etc/init.d下服务启动程序
       system(
    "/etc/init.d/mjpg-streamer start");
           //程序启动需要时间,sleep一下   sleep(
    2);   printf("Start OK! ");    } else if ( count != 0 && cvalue == '0') {
          //count不为0表示有mjpg_streamer进程,cvalue == '0' 表示指令要求杀掉进程, 调用killall命令
          system("/etc/init.d/mjpg-streamer stop");    //system("killall mjpg_streamer");   printf("Kill OK! ");    }    else printf("count = %d , cvalue = %c ", count ,cvalue);    pclose(fp);    fclose(pfile);   sleep(1); } return 0; }

     注意点:

    1. 直接用killall 方法可以杀进程,这里使用的服务启动和关闭的方法,更加安全和完整。

    2. system函数后应该判断一下返回值再输出。

    3.popen打开的文件要用pclose关闭。

  • 相关阅读:
    手动访问和传参
    子路由
    matlab 不同尺度的矩阵存储
    贝叶斯决策
    vim的使用
    linux另一种安装方式
    Linux中profile、bashrc、bash_profile之间的区别和联系
    emacs编辑器的使用
    关于鼠标不敏感导致自以为ubuntu很怪的问题
    各种可以远程
  • 原文地址:https://www.cnblogs.com/fwst/p/4135600.html
Copyright © 2011-2022 走看看