[英]epoll and negative errno value
我有ERROR_OUT函數,該函數在內部使用vfprintf在控制台中記錄錯誤。 當我嘗試使用此函數記錄某些epoll錯誤ERROR_OUT(L_NOTICE, "Epoll error: %d", errno);
,有時會得到奇怪的輸出:
Epoll error: -1079274856
我僅在epoll_wait
和epoll_ctl
之后使用它,並且僅在負返回值的情況下才調用它。
ERROR_OUT的代碼:
void ERROR_OUT(int level, char *template, ...){
va_list ap;
va_start(ap, template);
if ( level <= verbosity ){
if (output_handler == NULL){
vfprintf(stderr, template, ap);
}else{
(*output_handler)(level, template, ap);
}
}
va_end(ap);
}
輸出處理程序代碼:
void log_both(int level, const char *fmt, ...){
va_list argp;
va_start(argp, fmt);
vfprintf(stderr, fmt, argp);
printf("\n");
if (globalArgs.db_verbosity >= level)
globalArgs.db_log->log_error(format(fmt, argp));
va_end(argp);
}
你傳遞一個va_list
在調用log_both
通過*output_handler
和換行va_list
在va_list
命名argp
。
所以,你實際上傳遞va_list
包含va_list
以vfprintf
作為預計小數由於第三個參數%d
是在第一個元素va_list
。
因此,它應為void log_both(int level, const char *fmt, va_list argp){}
和va_list argp;
, va_start(argp, fmt);
和va_end(argp);
從功能主體中移除。
void log_both(int level, const char *fmt, va_list argp){
vfprintf(stderr, fmt, argp);
printf("\n");
if (globalArgs.db_verbosity >= level)
globalArgs.db_log->log_error(format(fmt, argp));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.