用c实现/usr/bin/sn_core.elf getstat打印出来的是 Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:27153 lock:1 wr1 -> lnk:1 rx:0 tx:0 lock:1 temp: 44.875 C Time: Fri, Mar 24, 2023, 03:01:36 +407237376 nanoseconds. 将temp 和 Time的值放到数组中
时间: 2024-03-09 10:45:58 浏览: 73
Linux系统目录解析
好的,我理解了你的问题。首先,需要解析 `/usr/bin/sn_core.elf getstat` 命令的输出,提取出其中的 `temp` 和 `Time` 的值,然后将它们存储到数组中。
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 1024
int main() {
char command[] = "/usr/bin/sn_core.elf getstat"; // 执行的命令
char line[MAX_LINE_LENGTH]; // 用于存储命令输出的每行内容
char *temp_str, *time_str; // 用于存储解析出的温度和时间的字符串
float temp; // 存储解析出的温度的值
char time[MAX_LINE_LENGTH]; // 存储解析出的时间的字符串
int time_ns; // 存储解析出的时间的纳秒值
char *token; // strtok 函数的返回值
int i = 0; // 存储已经存储了多少个元素到数组中
char *array[2]; // 存储解析出的温度和时间的数组
// 执行命令并逐行读取输出
FILE *fp = popen(command, "r");
while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) {
// 解析温度
if ((temp_str = strstr(line, "temp: ")) != NULL) {
temp_str += strlen("temp: ");
temp = strtof(temp_str, NULL);
}
// 解析时间
if ((time_str = strstr(line, "Time: ")) != NULL) {
time_str += strlen("Time: ");
strncpy(time, time_str, MAX_LINE_LENGTH);
time[strlen(time) - 1] = '\0'; // 去掉行末的换行符
// 解析纳秒值
token = strtok(time, " +");
while (token != NULL) {
if (strchr(token, 'n') != NULL) {
time_ns = strtol(token, NULL, 10);
break;
}
token = strtok(NULL, " +");
}
}
}
pclose(fp);
// 将解析出的温度和时间存储到数组中
array[i++] = malloc(sizeof(float));
memcpy(array[i - 1], &temp, sizeof(float));
array[i++] = malloc(sizeof(char) * MAX_LINE_LENGTH);
strcpy(array[i - 1], time);
// 打印数组内容
for (int j = 0; j < i; j++) {
if (j == 0) {
printf("温度:%f\n", *((float *)array[j]));
} else {
printf("时间:%s\n", array[j]);
}
free(array[j]);
}
return 0;
}
```
这段代码首先执行 `/usr/bin/sn_core.elf getstat` 命令,并逐行读取其输出。当解析到 `temp` 或 `Time` 时,提取出对应的字符串,并解析出温度和时间的值。然后将这些值存储到数组中,并打印出来。需要注意的是,由于温度是一个浮点数,而数组只能存储同类型的数据,所以需要使用 `memcpy` 函数将其存储到数组中。同时,由于 `strtok` 函数会修改原始字符串,因此需要先将时间字符串复制到另一个数组中。
希望能够帮到你!
阅读全文