APUE函数笔记: 附录
来源:互联网 发布:如何正确使用网络 编辑:程序博客网 时间:2024/05/16 06:36
附录:
#include <stdio.h>#include <errno.h>#include <string.h>#include <stdlib.h>#include <stdarg.h>#include <syslog.h>#define MAXLINE 4096 /* max line length *//* * default file access permissions for new files */#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)/* * default permissions for new directories */#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)/* * print a message and return to caller * caller specifies "errnoflag" */void err_doit(int errnoflag, int error, const char * fmt, va_list ap){ int len; char buf[MAXLINE]; vsnprintf(buf, MAXLINE, fmt, ap); if (errnoflag) { len = strlen(buf); snprintf(buf + len, MAXLINE - len, ": %s", strerror(error)); } strcat(buf, "\n"); fflush(stdout); /* in case stdout and stderr are the same */ fputs(buf, stderr); fflush(NULL); /* flushes all stdio output streams */}/* * nonfatal error related to a system call * print a message and return */void err_ret(const char * fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap);}/* * fatal error related to a system call * print a message and terminate */void err_sys(const char * fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap); exit(1);}/* * fatal error unrelated to a system call * error code passed as explict parameter * print a message and terminate */void err_exit(int error, const char * fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, error, fmt, ap); va_end(ap); exit(1);}/* * fatal error related to a system call * print a message, dump core, and terminate */void err_dump(const char * fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap); abort(); /* dump core and terminate */ exit(1); /* shouldn't get here */}/* * nonfatal error unrelated to a system call * print a message and return */void err_msg(const char * fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(0, 0, fmt, ap); va_end(ap);}/* * fatal error unrelated to a system call * print a message and terminate */void err_quit(const char * fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(0, 0, fmt, ap); va_end(ap); exit(1);}/* * caller must define and set this: nonzero if * interactive, zero if daemon */int log_to_stderr;/* * print a message and return to caller * caller specifies "errnoflag" and "priority" */void log_doit(int errnoflag, int priority, const char * fmt, va_list ap){ int len; int errno_save; char buf[MAXLINE]; errno_save = errno; /* value caller might want printed */ vsnprintf(buf, MAXLINE, fmt, ap); if (errnoflag) { len = strlen(buf); snprintf(buf + len, MAXLINE - len, ": %s", strerror(errno_save)); } strcat(buf, "\n"); if (log_to_stderr) { fflush(stdout); fputs(buf, stderr); fflush(stderr); } else { syslog(priority, "%s", buf); }}/* * initialize syslog(), if 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 related to a system call * print a message and terminate */void log_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 */void log_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 */void log_quit(const char * fmt, ...){ va_list ap; va_start(ap, fmt); log_doit(0, LOG_ERR, fmt, ap); va_end(ap); exit(2);}
- APUE函数笔记: 附录
- APUE函数笔记八: 信号
- APUE函数笔记九: 线程
- APUE函数笔记一: 文件IO
- APUE函数笔记二: 文件与目录
- APUE函数笔记三: 标准IO库
- APUE函数笔记五: 进程环境
- APUE函数笔记六: 进程控制
- APUE函数笔记七: 进程关系
- APUE函数笔记十: 线程控制
- APUE函数笔记十一: 守护进程
- APUE函数笔记十二: 高级IO
- APUE函数笔记十三: 进程间通信
- APUE笔记——alarm函数
- 《APUE》笔记-第四章-函数总结
- JavaScript学习笔记7-附录(回掉函数)
- apue-笔记
- 《APUE》笔记
- KMP匹配算法
- Myecplise String cannot be resolved to a type
- STM32的外部中断EXTI开发总结
- android, 删除SD卡音乐文件。通过getContentResolver读取音乐文件,可以获取到一个完整的路径,直接new File(这括号写获取的路径).delete();
- 一个苏州IT人的5年挨踢经历-------薪资篇
- APUE函数笔记: 附录
- 一个苏州IT人的5年挨踢经历-------未来篇
- Android获取屏幕大小的方法
- 雷军:做互联网需7字诀
- asp.net 使用jquery 和ajax 实现三级联动
- C语言中volatile关键字的作用
- android如何处理不同屏幕的适配
- 第8周任务1(方案1)
- X Window,鸡肋?