⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keep_alive.c

📁 watchdog source watchdog source
💻 C
字号:
/* $Header: /cvsroot/watchdog/watchdog/src/keep_alive.c,v 1.2 2006/07/31 09:39:23 meskes Exp $ */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <errno.h>#include <sys/syslog.h>#include <unistd.h>#include <time.h>#include <string.h>#include "extern.h"#include "watch_err.h"/* write a heartbeat file */int write_heartbeat(void){    time_t timenow;    struct tm *tm;    char tbuf[TS_SIZE + 1];    char tbufw[TS_SIZE + 1];    int i;    if (hb == NULL)	    return (ENOERR);    /* MJ 16/2/2001 keep a rolling buffer in a file of writes to the       watchdog device, any gaps in this will indicate a reboot */    timenow = time(NULL);    if (timenow != -1) {        tm = gmtime(&timenow);        /* Get the seconds since seconds since 00:00:00, Jan 1, 1970 */        strftime(tbuf, TS_SIZE - 1, "%s", tm);                 /* Make it the right width */         sprintf(tbufw, "%*s\n", TS_SIZE - 1, tbuf);        /* copy it to the buffer */        memcpy(timestamps + (lastts * TS_SIZE), tbufw, TS_SIZE);        // success        if (nrts < hbstamps)             nrts++;        lastts = ++lastts % hbstamps;                // write the buffer to the file        rewind(hb);        if (nrts == hbstamps) {            // write from the logical start of the buffer to the physical end            if (fwrite(timestamps + (lastts * TS_SIZE), TS_SIZE, hbstamps - lastts, hb) == 0) {		    int err = errno;#if USE_SYSLOG		    syslog(LOG_ERR, "write heartbeat file gave error %d = '%m'!", err);#else			/* USE_SYSLOG */		    perror(progname);#endif			/* USE_SYSLOG */	    }	                // write from the physical start of the buffer to the logical end            if (fwrite(timestamps, TS_SIZE, lastts, hb) == 0) {		    int err = errno;#if USE_SYSLOG		    syslog(LOG_ERR, "write heartbeat file gave error %d = '%m'!", err);#else			/* USE_SYSLOG */		    perror(progname);#endif			/* USE_SYSLOG */	    }        }        else {                    // write from the physical start of the buffer to the logical end            if (fwrite(timestamps, TS_SIZE, nrts, hb) == 0) {		    int err = errno;#if USE_SYSLOG		    syslog(LOG_ERR, "write heartbeat file gave error %d = '%m'!", err);#else			/* USE_SYSLOG */		    perror(progname);#endif			/* USE_SYSLOG */	    }        }        fflush(hb);       }     return(ENOERR);}/* write to the watchdog device */int keep_alive(void){    if (watchdog == -1)	return (ENOERR);    if (write(watchdog, "\0", 1) < 0) {	int err = errno;#if USE_SYSLOG	syslog(LOG_ERR, "write watchdog device gave error %d = '%m'!", err);#else			/* USE_SYSLOG */	perror(progname);#endif			/* USE_SYSLOG */	if (softboot)	    return (err);    }        /* MJ 20/2/2001 write a heartbeat to a file outside the syslog, because:       - there is no guarantee the system logger is up and running       - easier and quicker to parse checkpoint information */    write_heartbeat();        return(ENOERR);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -