C语言 XOpenDisplay返回显示,但将errno设置为11



我有一个函数,它打开X11显示,做一些事情,然后关闭它。我使用errno来捕获整个代码中的错误。经过一段时间的贬低,我了解到,即使XOpenDisplay返回实际指针(不是NULL), errno在这个函数中被设置为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初始状态是平台相关的,但我检查,它的值是0之前调用XOpenDisplay。提前感谢!

正如@Some_programmer_dude所提到的,我误读了errno,我将其用作错误指示器,因此我应该简单地检查文档并仅在NULL检查

之后使用errno

最新更新