My SQL数据库实用技术(33)
使用load_defaults() 的客户机程序几乎始终是在选项组列表中指定“ c l i e n t”(以便从选项文件中获取任何通用的客户机设置),但是也可以为请求自己的程序请求特定值。可将下列代码:
本文来自织梦
本文来自织梦
修改为:
copyright dedecms
然后将[ show _ argv] 组加到~ / . my.cnf 文件中:
copyright dedecms
copyright dedecms
有了这些改变,再次调用show _ argv 就得到了一个不同的结果,如下所示:
织梦好,好织梦
参数数组中选项值出现的顺序取决于它们在选项文件中列出的顺序,而不是选项组在group[] 数组中列出的顺序。这意味着将可能在选项文件的[client] 组之后指定程序专有的组。即假如在两个组中都指定了一个选项,程序专有的值将有更高的优先权。在这个例子中可以看到: 在组[client] 和[ show _ argv] 中都指定了host 选项,但是因为组[ show _ argv] 在选项文件的最后出现,所以host 值将在参数向量中出现并取得优先权。
load_defaults() 不是从环境设置中提取值, 假如想使用环境变量的值, 例如MYSQL _ TCP _ PORT 或者MYSQL _ UNIX _ PORT ,就必须使用getenv() 来自己治理。我不想把这个治理能力增加到客户机中,但这里有一个例子,介绍了如何检查几个标准的与M y S Q L
有关的环境变量值:
本文来自织梦
在标准MySQL 客户机中,环境变量值的优先权比在选项文件或命令行指定值的优先权要低。假如检查环境变量的值,并要与约定保持一致,那么就要在调用load_default() 或者处理命令行选项之前(不是之后)检查环境。
6.5.2 分析命令行参数
现在我们可以把所有的连接参数都放入参数向量,但需要一个分析该向量的方法。getopt_long() 函数就是为此目的设计的。getopt_long() 设在MySQL 客户机库的内部,因此,无论什么时候与库连接都可以访问它。源文件中要包含getopt.h 头文件,可以把这个头文件从MySQL 源分发包的include 目录拷贝到正在开发的客户机程序所在的目录中。
load_defaults() 与安全
因为有些程序(如p s)可以显示任何过程的参数列表, load_defaults() 将口令的文本放在参数列表中,所以您可能对它处理窥探的含意表示惊异。这没有问题,因为ps 显示原始的a rgv[] 内容,由load_defaults() 创建的任何口令参数都指向为它自己分配的区域,这个区域并不是原始区域的一部分,所以ps 看不见它。另一方面,除非故意清除,否则在命令行指定的口令会在ps 中出现。6 . 5 . 2节“分析命令行参数”介绍了如何去做。下面的程序show_param 使用load_defaults() 读取选项文件,然后调用getopt_long() 来分 dedecms.com
析参数向量。show_param 举例说明了通过执行以下操作参数处理的每个阶段发生了什么:
1) 建立主机名称、用户名称和口令的缺省值。
2) 打印原始连接参数和参数向量值。
3) 调用load_defaults() 重新编写参数向量,反映选项文件内容,然后打印结果向量。
文章评论
共有位Admini5网友发表了评论 查看完整内容