[英]XOpenDisplay return display, but set errno to 11
我有一個 function,它打開 X11 顯示,做一些事情,然后關閉它。 我使用 errno 來捕獲整個代碼中的錯誤。 經過一段時間的 debuff 我了解到,即使 XOpenDisplay 返回實際指針(不是 NULL),errno 在這個 function 中設置為 11。
int
take_screenshot()
{
/* Get display */
Display *display = XOpenDisplay(NULL);
/* XOpenDisplay may set errno to 11
* even though display is not NULL
*/
if (!display)
{
fprintf(stderr, "Error opening display: %s", strerror(errno));
return 1;
}
XCloseDisplay(display);
return 0;
}
如果在if statement
后僅添加errno = 0
,它工作正常,但這看起來是個壞主意。 同樣在手冊頁中,它說 errno initial state 是平台相關的,但我檢查了一下,在調用XOpenDisplay
之前它的值為 0。 先感謝您!
正如@Some_programmer_dude 提到的,我誤解了errno
,我將其用作錯誤指示器,所以我應該簡單地檢查文檔並僅在NULL
檢查后使用errno
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.