码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2014-12-01 18:58:32      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   文件   on   

目标: 板子上有个进程需要通过读取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; }

 

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

标签:style   blog   io   ar   color   os   sp   文件   on   

原文地址:http://www.cnblogs.com/fwst/p/4135600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!