首页 > 代码库 > 通过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控制一个进程开启或关闭
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。