gpt4 book ai didi

c - 为什么 XOpenDisplay() 不会因错误的显示名称而失败

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:55 25 4
gpt4 key购买 nike

谁能向我解释为什么 XOpenDisplay() 不会因为错误的显示名称而失败?只要名称遵循语法约定,它似乎总能成功——即使指定的主机名不存在。 XOpenDisplay() 似乎仅在字符串使用错误语法时才会失败,例如

d = XOpenDisplay("foobar");       // fails - presumably because of bad syntax in string
d = XOpenDisplay("foobar:0.0"); // works - although there is no host named "foobar"

当指定一个不存在的主机名时,XOpenDisplay() 似乎回退到 $DISPLAY。它应该是这样吗?我没有在 Xlib 文档中找到有关这些回退的任何信息。如果这是正确的行为,有没有办法检查返回的显示是否真的将我连接到“foobar:0.0”,或者它是否只是 $DISPLAY 的后备?

最佳答案

这看起来确实是相当软弱的行为,但是 http://tronche.com/gui/x/xlib/display/opening.html说:

The encoding and interpretation of the display name is implementation dependent.

所以看起来这种“解释”是允许的。

要判断是否打开了默认显示,您可以尝试:

d_default = XOpenDisplay(NULL);
d = XOpenDisplay("foobar:0.0");
if (!d || d == d_default) {
// foobar:0.0 was not opened.
}

如果这不起作用,因为 dd_default 不同,即使指的是相同的硬件,您也可以尝试比较 _XDisplay< 的字段 struct 而不是返回的指针,这些指针显然指向不同的结构,这些结构在某处必须具有相似的数据,因为它们引用相同的硬件。请参阅以下引用以了解可能性,但最简单的(如果可行)可能是查看是否 d->fd == d_default->fd

引用:http://xwindow.angelfire.com/page28.html

关于c - 为什么 XOpenDisplay() 不会因错误的显示名称而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com