• linux watchdog demo hacking


    /**********************************************************************
     *                    linux watchdog demo hacking
     * 说明:
     *     本文主要解析linux watchdog大概应该如何操作。
     *
     *                                    2016-3-28 深圳 南山平山村 曾剑锋
     *********************************************************************/
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <linux/types.h>
    #include <linux/watchdog.h>
    
    int fd;
    
    /*
     * This function simply sends an IOCTL to the driver, which in turn ticks
     * the PC Watchdog card to reset its internal timer so it doesn't trigger
     * a computer reset.
     * 这个函数仅仅是发送一个IOCTL命令给驱动,重新启动Watchdog的内部时钟计数器,
     * 这样就不会导致系统重启。
     */
    static void keep_alive(void)
    {
        int dummy;
    
        ioctl(fd, WDIOC_KEEPALIVE, &dummy);
    }
    
    /*
     * The main program.  Run the program with "-d" to disable the card,
     * or "-e" to enable the card.
     * 主程序,通过传递参数-d来关闭watchdog,-e来打开watchdog。
     */
    int main(int argc, char *argv[])
    {
        int flags;
    
        // 打开设备节点
        fd = open("/dev/watchdog", O_WRONLY);
        if (fd == -1) {
            fprintf(stderr, "Watchdog device not enabled.
    ");
            fflush(stderr);
            exit(-1);
        }
    
        if (argc > 1) {
            // 关闭watchdog
            if (!strncasecmp(argv[1], "-d", 2)) {
                flags = WDIOS_DISABLECARD;
                ioctl(fd, WDIOC_SETOPTIONS, &flags);
                fprintf(stderr, "Watchdog card disabled.
    ");
                fflush(stderr);
                exit(0);
            // 使能watchdog
            } else if (!strncasecmp(argv[1], "-e", 2)) {
                flags = WDIOS_ENABLECARD;
                ioctl(fd, WDIOC_SETOPTIONS, &flags);
                fprintf(stderr, "Watchdog card enabled.
    ");
                fflush(stderr);
                exit(0);
            } else {
                fprintf(stderr, "-d to disable, -e to enable.
    ");
                fprintf(stderr, "run by itself to tick the card.
    ");
                fflush(stderr);
                exit(0);
            }
        } else {
            fprintf(stderr, "Watchdog Ticking Away!
    ");
            fflush(stderr);
        }
    
        while(1) {
            // 每一秒喂狗一次
            keep_alive();
            sleep(1);
        }
    }
  • 相关阅读:
    开发和使用自定义服务器控件
    用户认证管理设计方案(转)
    用 @@ERROR 检测几条语句的成功
    在 ASP.NET 中支持数据库缓存相关性
    给新人程序员的八点建议(转)
    DataTable添加列
    各城市工资多少才等于北京5000元工资的生活?
    连续读取区块应用程序设置值
    VS2005 SP1发布,解决只能创建WebSite,无法创建Web Application项目的问题 (转)
    帮你免于失业的十大软件技术
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5328356.html
Copyright © 2020-2023  润新知