c - 如何使用`setcap`来增加`cargo test`生成的可执行文件的权限?
问题描述
我正在用 Rust/C 编写一个性能分析工具。
我在 Rust 中使用系统调用perf_event_open
,并编写了一个测试。测试是这样的:
#[test]
fn syscall_test() {
let event = &mut perf_event_attr {
type_: perf_type_id_PERF_TYPE_HARDWARE,
size: std::mem::size_of::<perf_event_attr>() as u32,
// something to consider fixing, for now leave it alone.
config: perf_hw_id_PERF_COUNT_HW_INSTRUCTIONS as u64,
..Default::default()
};
event.set_disabled(1);
event.set_exclude_kernel(1);
event.set_exclude_hv(1);
let fd: isize = perf_event_open(&event, 0, -1, -1, 0);
assert_ne!(fd, -1, "Testing for failure");
}
如何增加测试可执行文件的权限?如果没有为可执行文件设置 CAP_PERFMON 或 CAP_SYS_ADMIN,则 perf_event_open 将始终返回 -1。
解决方案
推荐阅读
- android - 是否可以使用 Mobile 的指纹扫描仪作为生物识别设备在服务器上进行身份验证?
- c++ - 类中枚举类的运算符重载
- r - 如何根据特定条件创建一个计算重复行的新变量
- jenkins - 如何在 jenkins 中设置 kubectl
- python - Pipenv 从哪里获取 CVE 数据?
- c++ - c++ 中的 range-for 会调用项目的复制构造函数吗?
- php - jquery 和删除类不起作用
- sql - SQL Server 2016:获取前 3 个逗号分隔值
- mysql - 无法使用 MySQL(8.0.15) (ER_ACCESS_DENIED_ERROR) 验证我的 Node js(v10.15.3) 应用程序、npm mysql (v2.17.1)
- mysql - 如何将 MySQL 数据库与 Jenkins 集成