簡體   English   中英

epoll和負errno值

[英]epoll and negative errno value

我有ERROR_OUT函數,該函數在內部使用vfprintf在控制台中記錄錯誤。 當我嘗試使用此函數記錄某些epoll錯誤ERROR_OUT(L_NOTICE, "Epoll error: %d", errno); ,有時會得到奇怪的輸出:

Epoll error: -1079274856

我僅在epoll_waitepoll_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_listva_list命名argp

所以,你實際上傳遞va_list包含va_listvfprintf作為預計小數由於第三個參數%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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM