用c写一个调用“/usr/bin/sn_core.elf getstat 2>/dev/null”指令 该指令打印的是Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:5361 lock:1 wr1 -> lnk:1 rx:6914 tx:1976 lock:1 syncs:wr1 sv:1 ss:'TRACK_PHASE' aux:0 sec:2051 nsec:200020560 mu:869665 dms:431662 dtxm:240682 drxm:189422 dtxs:241345 drxs:183745 asym:6341 crtt:14471 cko:-5 setp:5680 hd:57574 md:33267 ad:65000 ucnt:1831 temp: 43.687 C Time: Thu, Jan 1, 1970, 00:34:11 +917079040 nanoseconds. 判断WR mode后面的值 如果是“WRC_SLAVE_WR1”则将其中的mu dms crtt后面的值分别输入到不同的三个数组中,如果是“WRC_SLAVE_WR0”则将mu dms crtt的值输入到不同的数组中
时间: 2023-08-04 15:03:27 浏览: 109
以下是用C语言编写的调用指令并解析结果的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 256
int main() {
char command[MAX_LEN] = "/usr/bin/sn_core.elf getstat 2>/dev/null";
char result[MAX_LEN];
FILE *fp = popen(command, "r"); // 执行指令并获取输出流
if (!fp) {
perror("popen failed");
exit(1);
}
fgets(result, MAX_LEN, fp); // 读取输出流中的第一行
pclose(fp); // 关闭输出流
char *mode = strstr(result, "mode : ") + strlen("mode : "); // 查找WR mode所在的位置
if (!mode) {
printf("WR mode not found\n");
exit(1);
}
if (strncmp(mode, "WRC_SLAVE_WR1", strlen("WRC_SLAVE_WR1")) == 0) { // 判断是否为WRC_SLAVE_WR1
char *mu_str = strstr(result, "mu:") + strlen("mu:");
char *dms_str = strstr(result, "dms:") + strlen("dms:");
char *crtt_str = strstr(result, "crtt:") + strlen("crtt:");
int mu, dms, crtt;
sscanf(mu_str, "%d", &mu); // 解析mu的值
sscanf(dms_str, "%d", &dms); // 解析dms的值
sscanf(crtt_str, "%d", &crtt); // 解析crtt的值
// 将mu、dms、crtt的值分别存储在不同的数组中
int mu_array[1] = {mu};
int dms_array[1] = {dms};
int crtt_array[1] = {crtt};
printf("WR mode: WRC_SLAVE_WR1\n");
printf("mu: %d\n", mu);
printf("dms: %d\n", dms);
printf("crtt: %d\n", crtt);
} else if (strncmp(mode, "WRC_SLAVE_WR0", strlen("WRC_SLAVE_WR0")) == 0) { // 判断是否为WRC_SLAVE_WR0
char *mu_str = strstr(result, "mu:") + strlen("mu:");
char *dms_str = strstr(result, "dms:") + strlen("dms:");
char *crtt_str = strstr(result, "crtt:") + strlen("crtt:");
int mu, dms, crtt;
sscanf(mu_str, "%d", &mu); // 解析mu的值
sscanf(dms_str, "%d", &dms); // 解析dms的值
sscanf(crtt_str, "%d", &crtt); // 解析crtt的值
// 将mu、dms、crtt的值分别存储在不同的数组中
int mu_array[1] = {mu};
int dms_array[1] = {dms};
int crtt_array[1] = {crtt};
printf("WR mode: WRC_SLAVE_WR0\n");
printf("mu: %d\n", mu);
printf("dms: %d\n", dms);
printf("crtt: %d\n", crtt);
} else {
printf("Unknown WR mode: %s\n", mode);
exit(1);
}
return 0;
}
```
这段代码会执行指令`/usr/bin/sn_core.elf getstat 2>/dev/null`并获取输出流中的第一行,然后根据指令输出中的WR mode的值来判断需要将mu、dms、crtt的值存储在哪些数组中。如果是WRC_SLAVE_WR1,则将三个值分别存储在不同的数组中;如果是WRC_SLAVE_WR0,则将三个值存储在同一个数组中。最后输出得到的结果。
阅读全文