这是 pmcpp 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
PMCPP - Performance Co-Pilot 的简单预处理器
概要
PMCPP [-prs[-D 姓名[=折扣值] ...] [-I DIR ...] [入档]
商品描述
PMCPP 提供了一个非常简单的预处理器,最初设计用于操作
Performance Co-Pilot (PCP) 的 Performance Metric Name Space (PMNS) 文件,但稍后
泛化以提供条件块,包括文件处理、内联 shell 命令
任意文件的执行和宏替换。 它最常用于内部
在之后处理 PMNS 文件 pmLoad命名空间(3)或 pmLoadASCII命名空间(3) 被称为
并预处理配置文件 记录器(1)。
输入行从 入档 (或标准输入,如果 入档 未指定),已处理
并写入标准输出。
所有 /* ... */ 形式的 C 样式注释都从输入流中删除。
没有预定义的宏 PMCPP 尽管可以在命令中定义宏
线使用 -D 选项,其中 姓名 和 折扣值 必须遵循与描述相同的规则
下面为 #定义 指令。
PMCPP 在输入流中接受以下指令(如 CPP(1)):
· 的#include "文件名"
or
的#include <文件名>
在任何一种情况下,目录搜索路径 文件名 尝试 文件名 首先,然后
命令行目录 入档 (如果有),后跟任何以 -I
命令行参数,最后是 $PCP_VAR_DIR/pmns 目录(后者用于
与早期版本的向后兼容 PMCPP 以及隐含使用的
pmLoadASCII命名空间(3))。 的#include 指令可以嵌套,最大深度为
5.
· #贝壳 "命令"
or
#贝壳 '命令'
- 壳 命令 将被执行并将标准输出插入到流中
要处理的数据 PMCPP. 在功能上,这类似于 的#include
指令,除了输入行是从一个 命令 而不是一个文件。 这 #贝壳
指令对于包含或排除最有用 #定义 or #undef 基于指令
在运行时逻辑 命令.
· #定义 姓名 折扣值
or
#定义 姓名 "折扣值"
or
#定义 姓名 '折扣值'
定义宏的值 姓名 这必须是一个有效的 C 风格名称,所以领先
字母或下划线后跟零个或多个字母数字或下划线。 折扣值
是可选的(默认为空字符串)。 没有字符转义机制,
但是可以使用单引号或双引号来定义 折扣值 有特殊的
字符或嵌入的水平空白(无换行符)。
· #undef 姓名
删除宏定义(如果有) 姓名.
· #ifdef 姓名
...
#ENDIF
or
#ifndef 姓名
...
#ENDIF
封闭行将被剥离或包含,具体取决于宏 姓名 is
定义与否。
· 的#else
在一个 #ifdef or #ifndef 堵塞, 的#else 可用于分隔要包含的行,如果
前面的“if”条件为假。
宏替换是通过将输入流分解为由白色分隔的单词来实现的
宏名称中无效的空格或字符,即不是字母数字,也不是
下划线。 检查每个单词,如果它与宏名称匹配,则将该单词替换为
宏值,否则单词不变。
每个输入行通常有一个输出行,尽管如果出现以下情况,该行可能为空
由于处理注释或条件指令,文本已被删除。
当输入流发生变化时,会生成一个额外的输出行
形成:
# lineno "文件名"
表示 以下 输出行对应行号 线诺 输入的
文件 文件名.
- -P 参数抑制这些行标记行的生成。
- -s 参数将预期的输入样式从 C 类更改为 shell 类(其中 # 是一个
注释前缀)。 这迫使以下变化 PMCPP 行为:
· 控制前缀字符从 # 至 %,所以 %包括 例如。
· 不执行注释剥离。
为了更好地控制宏扩展, -r 选项将宏替换限制为
与模式匹配的单词 #名称或 #{姓名} 或者如果 -s 被指定,那么 %名称或
%{姓名}. 在这种模式下,宏 姓名 单独在输入流中永远不会被扩展,
但是在控制线(如 #ifdef) 宏 姓名 应该单独出现
前缀字符或花括号(请参阅下面的示例)。
重要 CPP(1) 特点 而不去 通过支持 PMCPP 包括:
· 带参数的宏—— PMCPP 宏仅支持无参数字符串
代换。
· #如果 表达式
...
#ENDIF
· 嵌套使用 #ifdef or #ifndef.
· 剥离 C++ 风格的注释,如 // 注释。
· 错误恢复——遇到的第一个错误 PMCPP 将是致命的。
· CPP(1) 命令行选项,如 -o, -W, -U及 -x.
示例
┌────────────────────────────────────────────────┐
│命令: PMCPP │
├──────────────────────────┬─────────────────────┤
│输入 │ 输出 │
├──────────────────────────┼─────────────────────┤
│ │ #1》 ” │
│#define 域名 27 │ │
│ │ │
│根{ │ 根{ │
│ foo MYDOMAIN:0:0 │ foo 27:0:0 │
│} │ } │
└────────────────────────┴──────────────────────┘
对于以下示例,文件 频率 包含以下行:
%define dk_freq 1 分钟
%define cpu_freq '15 秒'
┌─────────────────────────────────────────────────── ────────────────────────┐
│命令: PMCPP -rs │
├────────────────────────────────────┬────────────── ────────────────────────┤
│输入 │ 输出 │
├──────────────────────────────────┼────────────── ────────────────────────┤
│# 获取日志频率 │ # 获取日志频率 │
│# eg dk_freq 宏 │ # eg dk_freq 宏 │
│%包括“频率”│ │
│ │ │
│ %dk_freq 强制记录 { │ 1 分钟强制记录 { │
│ 磁盘.dev │ 磁盘.dev │
│} │ } │
│ │ │
│# 注意这里没有 % for want_cpu │ # 注意这里没有 % for want_cpu │
│%ifdef想要_cpu │ │
│%define cpu_pfx 'kernel.all.cpu.' │ │
│日志必须在 %cpu_freq { │ │
│ %{cpu_pfx}用户 │ │
│ %{cpu_pfx}系统 │ │
│} │ │
│%endif │ │
└────────────────────────────────────┴────────────── ────────────────────────┘
┌─────────────────────────────────────────────────── ────────────────────────┐
│命令: PMCPP -rs -Dwant_cpu │
├────────────────────────────────────┬────────────── ────────────────────────┤
│输入 │ 输出 │
├──────────────────────────────────┼────────────── ────────────────────────┤
│# 获取日志频率 │ # 获取日志频率 │
│# eg dk_freq 宏 │ # eg dk_freq 宏 │
│%包括“频率”│ │
│ │ │
│ %dk_freq 强制记录 { │ 1 分钟强制记录 { │
│ 磁盘.dev │ 磁盘.dev │
│} │ } │
│ │ │
│# 注意这里没有 % for want_cpu │ # 注意这里没有 % for want_cpu │
│%ifdef想要_cpu │ │
│%define cpu_pfx 'kernel.all.cpu.' │ │
│在 %cpu_freq 上强制记录 { │ 在 15 秒上强制记录 { │
│ %{cpu_pfx}用户 │ kernel.all.cpu.user │
│ %{cpu_pfx}sys │ kernel.all.cpu.sys │
│} │ } │
│%endif │ │
└────────────────────────────────────┴────────────── ────────────────────────┘
CFP 环境
带前缀的环境变量 五氯苯酚_ 用于参数化文件和目录
PCP 使用的名称。 在每次安装时,文件 /etc/pcp.conf 包含本地值
对于这些变量。 这 $PCP_CONF 变量可用于指定替代方案
配置文件,如中所述 配置文件(5)。
使用 onworks.net 服务在线使用 pmcpp