zoukankan      html  css  js  c++  java
  • linux之看门狗 (转)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <errno.h>
    #include <sys/time.h>
    #include <unistd.h>
    #include <time.h>
    #include <getopt.h>
    #include <sys/signal.h>
    #include <termios.h>
    
    struct watchdog_info{
        unsigned int options;   //options the card/driver supprots 19         
        unsigned int firmware_version;  //firmcard version of the card
        unsigned char identity[32];     //identity of the board 21
     };
    
    #define WATCHDOG_IOCTL_BASE 'W'
    #define WDIOC_GETSUPPORT _IOR(WATCHDOG_IOCTL_BASE, 0, struct watchdog_info)
    #define WDIOC_SETTIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 6, int)
    #define WDIOC_GETTIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 7, int) 27 
    #define WDIOS_DISABLECARD 0x0001        /* Turn off the watchdog timer */
    #define WDIOS_ENABLECARD 0x0002 /* Turn on the watchdog timer */
    #define WDIOC_SETOPTIONS _IOR(WATCHDOG_IOCTL_BASE, 4, int)
    #define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_BASE, 5, int)
    
    int Getch (void)   //无回显的从屏幕输入字符,来达到喂狗的目的
    
    {
    
         int ch;
         struct termios oldt, newt;   //终端设备结构体
         tcgetattr(STDIN_FILENO, &oldt);   //获得终端属性
         newt = oldt;
         newt.c_lflag &= ~(ECHO|ICANON);   //设置无回显属性
         tcsetattr(STDIN_FILENO, TCSANOW, &newt);  //设置新的终端属性
         ch = getchar();   //从键盘输入一个数据
         tcsetattr(STDIN_FILENO, TCSANOW, &oldt);  //恢复终端设备初始设置
         return ch;
    
    }
     //suspend some seconds
    int zsleep(int millisecond)
    
    {
         unsigned long usec;
         usec=1000*millisecond;
         usleep(usec); //睡眠usec秒
    }
    int Init()
    { 
         int fd;
         //open device file
         fd = open("/dev/watchdog",O_RDWR);   //打开看门狗设备
          if(fd < 0)
         {
             printf("device open fail\n");
             return -1;
         }
         return fd;
    }
    
    int main(int argc,char **argv)
    {
         int fd,ch;
         int i,j;
         char c;
         struct watchdog_info wi;
         fd=Init();  //打开终端看门狗设备
         //读板卡信息,但不常用
    
          ioctl(fd,WDIOC_GETSUPPORT,&wi);
         printf("%d,%s\n",wi.options,wi.identity);
         //读看门狗溢出时间,默认是5s
    
         //重新设置时间为10s
    
         i=5;
         printf("%d\n",ioctl(fd,WDIOC_SETTIMEOUT,&i));
         //读新的设置时间
    
          printf("%d\n",ioctl(fd,WDIOC_GETTIMEOUT,&i));
         printf("%d\n",i); 
         //看门狗开始和停止工作,打开和关闭设备具有同样的功能
    
         //关闭
          i=WDIOS_DISABLECARD;
         printf("%d\n",ioctl(fd,WDIOC_SETOPTIONS,&i));
         //打开
          i=WDIOS_ENABLECARD;
         printf("%d\n",ioctl(fd,WDIOC_SETOPTIONS,&i));
         while(1)
         {
               zsleep(100);
               if((c=Getch())!=27){
                    //输入如果不是ESC,就喂狗,否则不喂狗,到时间后系统重启
    
                    ioctl(fd,WDIOC_KEEPALIVE,NULL);
                    //write(fd,NULL,1);     //同样是喂狗
    
               }
         }
        close(fd);   //关闭设备
         return 0;
    }
  • 相关阅读:
    国内乡村安防全面建设仍需推进,EasyNVR/EasyGBS/EasyCVR平台助力治安防控
    TSINGSEE青犀视频播放视频流的编码格式和封装格式有什么关系?
    全景摄像头怎么接入网页进行视频直播?
    EasyNTS编译报错could not read Username for XXXXX
    【LOJ#3005】Limited Memory
    【BZOJ2407】探险
    【洛谷P4480】餐巾计划问题
    【CF163E】e-Government
    【洛谷P4332】三叉神经树
    【洛谷P7518】宝石
  • 原文地址:https://www.cnblogs.com/sankye/p/2811260.html
Copyright © 2011-2022 走看看