DISPLAY变量的含义

这利用了X Window窗口系统的网络透明性,即,图形程序的运行和显示 可以在不同的主机上。这里首先要澄清两个概念,即X Server和X Client。假设 xclock程序在主机A上运行,但是显示在主机B上,那么谁是X Server,谁又是X Client呢?A是X Server,B是X Client?错!正确的答案是,应用程序xclock是X Client,主机B是X Server。为什么呢?Server是提供“资源”的一方,而Client是使用“资源”的一方。对于窗口系统来说,“资源”就是显示资源和输入设备,如显示器,键盘,鼠标等。主机B提供了这些资源,而应用程序xclock请求使用这些资 源,所以说xclock是X Client,主机B是X Server(更确切的说,应该是主机B上的 某个应用程序,例如/usr/X11R6/bin/X,他控制着B上这些硬件资源的分配和管理)。搞清楚了X Client和X Server的概念后,再来看一个重要的环境变量: DISPLAY,它指定了一个显示设备,所有的图形程序都将把自己显示到这个设备上。DISPLAY的格式为:hostname:displaynumber.screennumber。hostname是一个主机名,或者是它的ip地址。为了理解后面的displaynumber和screennumber,我们需要知道,在某些机器上,可能有多个显示设备共享使用同一套输入设备,例如在一台PC上连接两台CRT显示器,但是它们只共享使用一个键盘和一个鼠标。这一组显示设备就拥有一个共同的displaynumber,而这组显示设备中的每个单独的设备则拥有自己单独的screennumber。displaynumber和screennumber都是从零开始的数字。这样,对于我们普通用户来说,displaynumber、screennumber就都是0。 hostname可以省略(但它后面的冒号不能省略),如果省略的话,则使用本机作为默认的hostname,即:m.n等价于localhost:m.n。

 

你可能注意到了一个问题,按照前面所述,似乎可以把一个X图形程序显示到网络 中任何一个X Server上,这样必将造成混乱。所以,X Window系统提供了权限控制 命令xhost,可以控制哪些机器能使用我这个X Server。xhost的使用很简单,如果允许主机foo使用我这个X Server,可以使用"xhost +foo";如果不允许主机foo使 用我这个X Server,可以使用"xhost -foo";如果允许任何主机使用我这个X Server,简单的"xhost +"即可;反之,"xhost -"将禁止任何主机使用我这个X Server。更进一步的使用可以参考xhost(1)。

 

 

 

### 关于变量重载的概念 在编程领域,“变量重载”这一术语并不常见,通常讨论的是“方法重载”或“运算符重载”。然而,在某些上下文中,可能会提到类似于“变量重载”的行为,这实际上是指通过特定机制使变量具有不同的含义或功能。以下是几种可能的情况: #### 1. **只读变量(常量)** 在一些编程语言中,可以通过声明只读变量来防止其被重新赋值。例如,在 Linux Shell 中,`readonly` 命令用于创建不可修改的变量[^1]。 ```bash #!/bin/bash var="original value" echo $var readonly var var="new value" # 尝试修改会报错 ``` 上述代码展示了如何使用 `readonly` 创建一个不可变的变量。 --- #### 2. **Python 中的属性覆盖** 虽然严格意义上不是“变量重载”,但在 Python 类的设计中,可以通过属性装饰器实现动态的行为调整。这种技术允许开发者基于条件改变变量的表现形式。 ```python class Example: def __init__(self): self._value = None @property def value(self): # 定义 getter 方法 return self._value * 2 if self._value is not None else None @value.setter def value(self, new_value): # 定义 setter 方法 if isinstance(new_value, int) and new_value >= 0: self._value = new_value else: raise ValueError("Value must be a non-negative integer") obj = Example() obj.value = 5 print(obj.value) # 输出 10 ``` 此示例说明了如何通过属性装饰器模拟某种意义上的“变量重载”。 --- #### 3. **C++ 和 Java 的构造函数重载** 尽管这是针对类而非单个变量的操作,但它体现了类似的多态概念——即相同的名称可以根据输入参数的不同表现出多种形态。例如,在 C++ 中可以为同一个类定义多个构造函数[^4]。 ```cpp #include <iostream> using namespace std; class Point { public: int x, y; // 构造函数重载 Point() : x(0), y(0) {} Point(int _x, int _y) : x(_x), y(_y) {} void display() const { cout << "(" << x << ", " << y << ")" << endl; } }; int main() { Point p1; // 调用无参构造函数 Point p2(3, 4); // 调用带参构造函数 p1.display(); // (0, 0) p2.display(); // (3, 4) return 0; } ``` 这里展示了一个简单的例子,其中 `Point` 类支持两种初始化方式。 --- #### 4. **Java 中的方法重载** 与前面的例子类似,Java 支持在同一作用域内定义同名但签名不同的方法[^2]。这种方法使得调用者能够根据实际需求传递不同数量或类型的参数。 ```java public class Calculator { public double add(double num1, double num2) { return num1 + num2; } public String add(String str1, String str2) { return str1.concat(str2); } public static void main(String[] args) { Calculator calc = new Calculator(); System.out.println(calc.add(5.5, 7.8)); // 数字相加 System.out.println(calc.add("Hello", "World")); // 字符串拼接 } } ``` 这段代码片段清楚地表明了同一方法名下不同类型操作的可能性。 --- #### 总结 真正的“变量重载”并非广泛接受的标准术语;更常见的做法是在设计阶段利用其他特性(如只读保护、属性封装、构造函数/方法重载等),从而达到灵活控制的目的。如果目标是让某个标识符具备多重意义,则需依据具体场景选择合适的技术手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值