xstr 命令
用途
从 C 程序中提取字符串以实现共享字符串。
语法
描述
xstr 命令维护一个名为 strings 的文件,大型程序各组件的字符串散列到该文件中。 这些字符串替换为此数组的引用。 这适合于实现共享常量字符串,如果它们也是只读属性则更有用。
命令:
xstr -c File从 文件 参数中的 C 源抽取字符串,将字符串引用替换为某些数字的格式 (&xstr[数字]) 的表达式。 xstr 数组的适当声明添加到文件首部。 得到的 C 文本放入文件 x.c 中,然后进行编译。 从文件中读出的字符串会追加到 strings 文件中(如果它们在该处尚不存在)。 重复的字符串和作为现有字符串后缀的字符串不会造成文件 strings 的更改。
如果某字符串是文件中另一字符串的后缀,但是这个较短的字符串先被 xstr 命令读入,那么两个字符串都存放于文件 strings。
在一个大型程序的所有组件都被编译后,声明公共 xstr 数组空间的文件 xs.c 可以用以下格式的命令创建:
xstr接下来应编译 xs.c 文件并装入剩下的程序。 如果可能,这个数组会被保存为只读(共享)以节省空间和数据交换的开销。
xstr 命令也可以用于单个文件。 命令:
xstr File像以前一样,创建文件 x.c 和 xs.c,但是没有使用或影响任何在相同目录下的 strings 文件。
如果任何宏定义产生字符串,或者如果存在条件代码包含字符串而事实上并不需要这些字符串,在经过 C 预处理器编译后运行 xstr 命令十分有用。
当给定 -(负号)标志时,xstr 命令读取标准输入,并且除非同时指定 -c 标志,否则不会更改 strings 文件。
在经过 C 预编译器编译后运行 xstr 命令的正确命令序列是:
cc -E name.c | xstr -c -
cc -c x.c
mv x.o name.o除非添加新项目,xstr 命令并不改变文件 strings;因而除非真的需要,make 命令能够避免重新生成 xs.o 文件。
标志
| 项 | 描述 |
|---|---|
| -c | 从所指定的文件中抽取字符串,并将其放在 strings 文件中。 |
| -v | 详细方式。 指出字符串是何时找到的,或在 strings 文件中创建新字符串的时间。 |
| - | 读取标准输入。 |
示例
- 要从 File.c 参数中的 C 源抽取字符串,请将字符串引用替换为格式 (&xstr[数字]) 的表达式:
xstr 数组的适当声明添加到文件首部。 得到的 C 文本放入文件 x.c 中,然后进行编译。xstr -c File.c - 要在 xs.c 文件中声明公共 xstr 数组空间:
xstr
文件
| 项 | 描述 |
|---|---|
| 字符串 | 包含抽取字符串的文件。 |
| x.c | 处理过的 C 源程序。 |
| xs.c | xstr 数组定义的 C 源程序。 |
| /tmp/xs* | 当 xstr 命令不更改 strings 文件时的临时文件。 |
| /usr/ccs/bin/mkstr | 包含可执行文件。 |
| /usr/ccs /bin/mkstr | 包含 Berkeley 环境中的可执行文件。 |