通过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 = 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; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。