天嵌 ARM开发社区

 找回密码
 注册
查看: 3222|回复: 2

linux watchdog开发问题,文件长度变0

[复制链接]
lgperson 发表于 2012-4-11 12:51:21 | 显示全部楼层 |阅读模式
在x86上用CC编译执行后,按ctrl+c中断,没问题。但用GCC,按ctrl+c中断重起后文件长度变0了。这是怎么回事啊?
用TQ2440还没试过,回家在试;P



//============================================================================
// Name        : main.cpp
// Author      : superman
// Version     :
// Copyright   : copy right by wangliang
// Description : APSite Control, Ansi-style
//============================================================================
#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)
#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秒
     return 0;
}
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 fd;
    int i;
    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 时间=%d\n",ioctl(fd,WDIOC_GETTIMEOUT,&i),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)
{
  sleep(1);
  printf("喂狗 %d\n",ioctl(fd,WDIOC_KEEPALIVE,NULL));
}
close(fd);   //关闭设备


return 0;
}

wuweidong 发表于 2012-4-11 13:19:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
embedsky_lhh 发表于 2012-4-11 14:40:30 | 显示全部楼层
建议楼主 把问题说清楚些,方便大家跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-19 00:40 , Processed in 1.046875 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表