c - 从 c 中的命令输出中提取值
问题描述
我正在运行这个命令
cat /proc/devices/memory/events/pcie0_read
在我的代码(c 应用程序)中。这是我的代码
#include<stdio.h>
#include<stdlib.h>
void main()
{
system(" cat /proc/devices/memory/events/pcie0_read ");
}
这个命令的输出是
fidt=0x12,dtw=0x33,id=0x67
我只想使用相同的 c 应用程序从命令输出中提取值。
我只想提取 0x336712 并将此值保存在上述命令输出的变量中。
例如:
char var[100] or unsigned int var;
从命令输出中提取后,我应该得到它,
var=0x336712
我怎么做???
解决方案
除非您确实需要运行外部命令,否则您可能希望/proc/...
像任何普通文件一样直接读取。此外,fscanf函数非常通用,可以避免复杂的字符串解析。
#include <stdio.h>
int main() {
unsigned int fidt, dtw,id;
FILE *f = fopen("/proc/devices/memory/events/pcie0_read", "r");
fscanf(f, "fidt=%x,dtw=%x,id=%x", &fidt, &dtw, &id);
fclose(f);
printf("output: 0x%x\n", (id << 32) | (dtw << 16) | fidt);
return 0;
}
推荐阅读
- mysql - 我如何以一种可以接受的方式为 sql 编写“?%”?
- shell - 如何减慢拖尾日志
- python-3.x - 如何根据 Apache NiFi 中的属性值执行脚本(比如 python 或 java 等)
- c# - “/”应用程序中的服务器错误。指定的转换无效
- opencv - 如何在 Opencv 中使用 Pytorch 张量对象而不转换为 numpy 数组?
- reactjs - React 按钮单击隐藏和显示组件
- openlayers - 从 OpenLayers 中的 WMS 图层获取多边形内的要素
- python - GET API 中的 flask_restful 类似数组的参数
- expo - 如何使用 Expo 的 Manage Work 流程生成 Apk 文件
- spring-boot - 为什么我的 spring-boot 应用程序在 Intellij 中给出“ClassNotFoundException:javax.servlet.Filter”但在 STS 3 中没有?