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

#include <stdio.h>

int main()
{
FILE *pfile;
while (){
  const char * FILEPATH = "/sys/class/gpio/gpio26/value";
   pfile = fopen(FILEPATH, "r");
   if (pfile == NULL)
   {
   printf("Open Error\n");
  exit();
  }
  char buf[];
  fgets(buf, , pfile);
    //cvalue 保存读取到的gpio文件的值,0或者1
  char cvalue = buf[];   char command[];
  char bufresult[];
   int count = ;
  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();
   }
     // popen操作需要时间,sleep一下
   sleep();
     // 当没有mjpg_streamer进程时,bufresult读取结果会为NULL。此时将count置为0,表示没有mjpg_streamer进程在运行
  if( (fgets(bufresult, , fp)) != NULL )
   {
     count = atoi(bufresult);
   }
   else
   count = ;    printf("count = %d\n", count);
if( count == && cvalue == '')
{
       // 当gpio 为1时,count为0时,表示没有mjpg_streamer进程在运行,并且需要开启这个进程,调用/etc/init.d下服务启动程序
   system("/etc/init.d/mjpg-streamer start");
       //程序启动需要时间,sleep一下
  sleep();
  printf("Start OK!\n");
   }
else if ( count != && cvalue == '')
{
      //count不为0表示有mjpg_streamer进程,cvalue == '0' 表示指令要求杀掉进程, 调用killall命令
      system("/etc/init.d/mjpg-streamer stop");
   //system("killall mjpg_streamer");
  printf("Kill OK!\n");
   }
   else printf("count = %d , cvalue = %c\n", count ,cvalue);    pclose(fp);    fclose(pfile);
  sleep();
} return ;
}

注意点:

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

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

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

通过gpio控制一个进程开启或关闭的更多相关文章

  1. nRF51822之app_button控制uart的开启和关闭

    为什么要使用app_button来控制uart的开启和关闭 还是先上datesheet中uart开启的时候需要HFCLK,需要消耗大量大电流.所以在我们需要的时候需要通过io来通知nrf51822开启 ...

  2. Android开发之控制Toast的开启与关闭

    开发这个程序之前先解释一下,为什么Toast信息提示框在显示一定时间后会自己主动消失?由于在Android系统中有一个Toast队列,系统会依次从这个队列中取出一个Toast,并显示它.在显示了指定时 ...

  3. C#开启一个进程

    Process myProc = null; myProc = Process.Start(@"E:\QQ轻聊\Tencent\QQLite\Bin\QQScLauncher.exe&quo ...

  4. service: no such service mysqld 与MySQL的开启,关闭和重启

    1.问题原因与解决办法 因为修改了MySQL临时文件的目录后,使用service mysqld restart重启MySQL出现如下错误: service: no such service mysql ...

  5. java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流

    前言: 之前已经对FFmpeg命令进行了封装http://blog.csdn.net/eguid_1/article/details/51787646,但是当时没有考虑到扩展性,所以总体设计不是太好, ...

  6. C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别

    C# 最基本的涉及模式(单例模式) //密封,保证不能继承 public sealed class Xiaohouye    { //私有的构造函数,保证外部不能实例化        private  ...

  7. C# ASP.NET 控制windows服务的 开启和关闭 以及重启

    用ASP.NET控制Windows服务的开启与关闭效果如图 代码 首页页面需要添加引用 页面的pageload中 实例化windows服务 protected void Page_Load(objec ...

  8. python环境下实现OrangePi Zero寄存器访问及GPIO控制

    最近入手OrangePi Zero一块,程序上需要使用板子上自带的LED灯,在网上一查,不得不说OPi的支持跟树莓派无法相比.自己摸索了一下,实现简单的GPIO控制方法,作者的Zero安装的是Armb ...

  9. HTTP的KeepAlive是开启还是关闭?

    HTTP的KeepAlive是开启还是关闭? http://itindex.net/detail/50719-http-keepalive 1.KeepAlive的概念与优势 HTTP的KeepAli ...

随机推荐

  1. linux 之oracle静默安装

    一.安装前准备工作1.修改主机名#vi /etc/hosts   //并添加内网IP地址对应的hostname,如下127.0.0.1           localhost::1           ...

  2. Redis操作类型

  3. 使用Docker快速搭建Tensorflow开发环境

    当我刚开始学习使用scikit-learn时,总是会出现各种各样的包依赖问题,兜兜转转了一遍才全部安装好,现在的机器学习算法开发者大都使用tensorflow.pytorch来实现自己的想法,但依然会 ...

  4. mybatis的xml中也可以通过传入标记参数然后用 choose写选择语句【我】

    mybatis的xml中也可以通过传入标记参数然后用 choose写选择语句

  5. React——相关工具概述

    Create a New React App Use an integrated toolchain for the best user and developer experience. This ...

  6. elasticsearch _search结果解析

    kibana中输入:GET /_search 会返回一下结果: { "took": 9, # took:整个搜索请求花费多少毫秒 "timed_out": fa ...

  7. spring boot入门学习---热部署

    1.maven文件 2.application.properties文件配置

  8. java nio Files.newDirectoryStream用法

    try(DirectoryStream<Path> dirStream = Files.newDirectoryStream(Paths.get(directory,"*.ts& ...

  9. kubenetes创建一个pod应用

    Pod是可以创建和管理Kubernetes计算的最小可部署单元.一个Pod代表着集群中运行的一个进程.每个pod都有一个唯一的ip. 一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker) ...

  10. 关于类似QQ的展开和折叠效果的实现

    介绍: 1.两级折叠与展开: 实现原理如下: 1>通过表视图的组的头视图和单元格实现; 2>通过改变cell的高度实现; 3>通过cell实现; 实现 UITableView 的ce ...