Ai
1 Star 0 Fork 0

zdevt/cpptest

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
watchdog-test.c 2.75 KB
一键复制 编辑 原始数据 按行查看 历史
zdevt 提交于 2023-08-13 12:48 +08:00 . up
/*
* Watchdog Driver Test Program
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.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.
*/
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.
*/
static void term ( int sig )
{
close ( fd );
fprintf ( stderr, "Stopping watchdog ticks...\n" );
exit ( 0 );
}
int main ( int argc, char* argv[] )
{
int flags;
unsigned int ping_rate = 1;
fd = open ( "/dev/watchdog", O_WRONLY );
if ( fd == -1 )
{
fprintf ( stderr, "Watchdog device not enabled.\n" );
fflush ( stderr );
exit ( -1 );
}
if ( argc > 1 )
{
if ( !strncasecmp ( argv[1], "-d", 2 ) )
{
flags = WDIOS_DISABLECARD;
ioctl ( fd, WDIOC_SETOPTIONS, &flags );
fprintf ( stderr, "Watchdog card disabled.\n" );
fflush ( stderr );
goto end;
}
else if ( !strncasecmp ( argv[1], "-e", 2 ) )
{
flags = WDIOS_ENABLECARD;
ioctl ( fd, WDIOC_SETOPTIONS, &flags );
fprintf ( stderr, "Watchdog card enabled.\n" );
fflush ( stderr );
goto end;
}
else if ( !strncasecmp ( argv[1], "-t", 2 ) && argv[2] )
{
flags = atoi ( argv[2] );
ioctl ( fd, WDIOC_SETTIMEOUT, &flags );
fprintf ( stderr, "Watchdog timeout set to %u seconds.\n", flags );
fflush ( stderr );
goto end;
}
else if ( !strncasecmp ( argv[1], "-p", 2 ) && argv[2] )
{
ping_rate = strtoul ( argv[2], NULL, 0 );
fprintf ( stderr, "Watchdog ping rate set to %u seconds.\n", ping_rate );
fflush ( stderr );
}
else
{
fprintf ( stderr, "-d to disable, -e to enable, -t <n> to set " \
"the timeout,\n-p <n> to set the ping rate, and \n" );
fprintf ( stderr, "run by itself to tick the card.\n" );
fflush ( stderr );
goto end;
}
}
fprintf ( stderr, "Watchdog Ticking Away!\n" );
fflush ( stderr );
signal ( SIGINT, term );
while ( 1 )
{
keep_alive();
sleep ( ping_rate );
}
end:
close ( fd );
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zdevt/cpptest.git
git@gitee.com:zdevt/cpptest.git
zdevt
cpptest
cpptest
master

搜索帮助