- 论坛徽章:
- 0
|
请教:如何在c++中实现 vprintf的功能
下面这段程序就无法编译。
这段程序是 Richard Stevens在apue中使用的通用日志处理程序。他使用可变长参数,来打印程序中的日志信息。
vprintf是可以直接使用的。但是无法实现可变长参数。
- // 与系统相关的非致命的错误信息
- void
- log_ret(const char *fmt, ...)
- {
- va_list ap;
- va_start(ap, fmt);
- log_doit(1, LOG_ERR, fmt, ap);
- va_end(ap);
- return;
- }
复制代码
- // 写日志信息
- static void
- log_doit(int errnoflag, int priority, const char *fmt, va_list ap)
- // errnoflag: 为1:系统错误。 为0:非系统错误
- // priority: 错误级别。syslog必须用。其它日志格式暂时不使用。
- {
- static char sBuf[MAXLINE];
- int errno_save;
- errno_save = errno;
- vsprintf(sBuf, fmt, ap);
- if (errnoflag)
- {
- sprintf(sBuf+strlen(sBuf), ": %s\n", strerror(errno_save));
- }
- else
- {
- strcat(sBuf, "\n");
- }
- fputs(sBuf, pfLog);
- }
复制代码 |
|