博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用于守护进程的出错处理函数
阅读量:5889 次
发布时间:2019-06-19

本文共 2093 字,大约阅读时间需要 6 分钟。

/** Error routines for programs that can run as a daemon.*/#include "apue.h"#include 
/* for definition of errno */#include
/* ISO C variable arguments */#include
static void log_doit(int, int, const char *, va_list ap);/** Caller must define and set this: nonzero if* interactive, zero if daemon*/extern int log_to_stderr;;/** Initialize syslog(), is running as daemon.*/void log_open(const char *ident, int option, int facility){ if(log_to_stderr == 0) openlog(ident, option, facility);}/** Nonfatal error related to a system call.* Print a message with the system's errno value and return.*/void log_ret(const char *fmt, ...){ va_list ap; va_start(ap, fmt); log_doit(1, LOG_ERR, fmt, ap); va_end(ap);}/** Fatal error realted to a system call.* Print a message and terminate.*/voidlog_sys(const char *fmt, ...){ va_list ap; va_start(ap, fmt); log_doit(1, LOG_ERR, fmt, ap); va_end(ap); exit(2);}/** Nonfatal error unrelated to a system call.* Print a message and return.*/voidlog_msg(const char *fmt, ...){ va_list ap; va_start(ap, fmt); log_doit(0, LOG_ERR, fmt, ap); va_end(ap);}/** Fatal error unrelated to a system call.* Print a message and terminate.*/voidlog_quit(const char *fmt, ...){ va_list ap; va_start(ap, fmt); log_doit(0, LOG_ERR, fmt, ap); va_end(ap); exit(2);}/** Print a message and return to caller.* Caller specifies "errnoflag" and "priority". */static voidlog_doit(int errnoflag, int priority, const char *fmt, va_list ap){ int errno_save; char buf[MAXLINE]; errno_save = errno; /* value caller might want printed */ vsnprintf(buf, MAXLINE, fmt, ap); if(errnoflag) snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s", strerror(errno_save)); strcat(buf, "\n"); if(log_to_stderr) { fflush(stdout); fputs(buf, stderr); fflush(stderr); } else { syslog(priority, buf); }}

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:

转载地址:http://nxysx.baihongyu.com/

你可能感兴趣的文章
数据结构--排序
查看>>
Fix Project Properties.
查看>>
dom4j相当全的资料
查看>>
利用JNI进行对象操作
查看>>
linux 基础入门学习
查看>>
Hbuilder最新版本不能自动编译
查看>>
sparkSQL的整体实现框架
查看>>
搭建SpringMVC开发环境
查看>>
二叉树的镜像
查看>>
HTTP 报文详解
查看>>
Active Directory 基础回顾 (一) 如何理解group的类型
查看>>
awk和sed字符串处理速度比较与处理速度的测试方法
查看>>
项目管理修炼之道之把握项目的节奏
查看>>
Android Studio打包.so文件教程
查看>>
Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)
查看>>
windows下安装emacs及添加配置文件(网络整合收集)
查看>>
如何找到第一份 DBA 工作?
查看>>
XenServer 6.2 开源以及下载
查看>>
maven环境的搭建
查看>>
linux 引导流程解析续
查看>>