/usr/bin/sn_core.elf getstat 2>/dev/null
时间: 2023-08-14 15:03:09 浏览: 96
这是一个 Linux 命令行命令,执行了 /usr/bin/sn_core.elf 可执行文件,并传递了参数 getstat。其中 2>/dev/null 是将 stderr(标准错误输出)重定向到 /dev/null,意味着将错误信息丢弃。该命令可能是用于获取 sn_core.elf 进程的状态信息,并将结果输出到 stdout(标准输出)。
相关问题
usr/bin/sn_core.elf getstat 2>/dev/null该指令打印出来的是Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:5496 lock:1 wr1 -> lnk:1 rx:7690 tx:2196 lock:1 syncs:wr1 sv:1 ss:'TRACK_PHASE' aux:0 sec:2284 nsec:105818016 mu:867144 dms:422759 dtxm:238106 drxm:197332 dtxs:241345 drxs:178945 asym:21626 crtt:11416 cko:-2 setp:13003 hd:57678 md:31716 ad:65000 ucnt:2045 temp: 46.812 C 用该代码char command[] = "/usr/bin/sn_core.elf getstat 2>/dev/null"; char line[MAX_LINE_LENGTH]; char *mode_str, *mu_str,*dms_str,*crtt_str; FILE *fp; while (1) { fp = popen(command, "r"); if(fp == NULL){ printf("Error running command.\n"); exit(1); }fgets(line, MAX_LINE_LENGTH, fp; if((mode_str = strstr(line,"mode : ")) != NULL){ mode_str += strlen("mode : "); } if(!mode_str){ printf("WR mode not fount\n"); exit(1); } printf("%s\n",line); 打印line的值是Status:WR mode : WRC_SLAVE_WR1 后面的内容没有打印出来这是为什么
你的代码中只读取了一行数据,因此只打印了第一行的内容。如果你希望打印所有行的内容,你需要在一个循环中读取所有行的数据,并且在每次迭代中打印每一行的内容。你可以尝试修改你的代码如下:
```
char command[] = "/usr/bin/sn_core.elf getstat 2>/dev/null";
char line[MAX_LINE_LENGTH];
char *mode_str, *mu_str, *dms_str, *crtt_str;
FILE *fp;
while (1) {
fp = popen(command, "r");
if (fp == NULL) {
printf("Failed to execute command\n");
exit(1);
}
while (fgets(line, MAX_LINE_LENGTH, fp)) {
if ((mode_str = strstr(line, "mode : ")) != NULL) {
mode_str += strlen("mode : ");
} else {
printf("WR mode not found\n");
exit(1);
}
printf("%s", line);
}
pclose(fp);
}
```
这个修改后的代码会在一个无限循环中执行 `"/usr/bin/sn_core.elf getstat 2>/dev/null"` 命令,并使用 `fgets()` 函数从缓冲区中读取数据。在每次迭代中,它会检查 `line` 变量中是否包含 "mode : " 字符串,如果是,则将 `mode_str` 指针指向 "mode : " 后面的字符串。然后,它会打印每一行的内容,并在循环结束后关闭缓冲区。
用c 写一个每隔1秒调用/usr/bin/sn_core.elf getstat 2>/dev/null指令 指令打印的内容是Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:7141 lock:1 wr1 -> lnk:1 rx:2350 tx:678 lock:1 syncs:wr1 sv:1 ss:'TRACK_PHASE' aux:0 sec:721 nsec:492689488 mu:865675 dms:430067 dtxm:240682 drxm:187022 dtxs:241345 drxs:182145 asym:5541 crtt:14481 cko:0 setp:4107 hd:57674 md:33225 ad:65000 ucnt:619 temp: 45.437 C Time: Thu, Jan 1, 1970, 00:12:01 +965544976 nanoseconds. 然后将其中的temp mu dms crtt time的值存入数组 该数组中包含7个子数组 子数组最大拥有50个值 当第51个值输入时 将第一个值舍弃 以此类推
好的,以下是你需要的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#define MAX_VALUES 50
#define INTERVAL 1
int main() {
char command[] = "/usr/bin/sn_core.elf getstat 2>/dev/null";
char buffer[1024];
double temp_values[MAX_VALUES], mu_values[MAX_VALUES], dms_values[MAX_VALUES], crtt_values[MAX_VALUES];
time_t time_values[MAX_VALUES];
int temp_index = 0, mu_index = 0, dms_index = 0, crtt_index = 0, time_index = 0;
int i;
while (1) {
FILE *fp = popen(command, "r");
if (fp == NULL) {
perror("Failed to execute command");
exit(1);
}
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
if (strstr(buffer, "temp:") != NULL) {
double temp;
sscanf(buffer, "%*[^:]: %lf", &temp);
temp_values[temp_index % MAX_VALUES] = temp;
temp_index++;
} else if (strstr(buffer, "mu:") != NULL) {
double mu;
sscanf(buffer, "%*[^:]: %lf", &mu);
mu_values[mu_index % MAX_VALUES] = mu;
mu_index++;
} else if (strstr(buffer, "dms:") != NULL) {
double dms;
sscanf(buffer, "%*[^:]: %lf", &dms);
dms_values[dms_index % MAX_VALUES] = dms;
dms_index++;
} else if (strstr(buffer, "crtt:") != NULL) {
double crtt;
sscanf(buffer, "%*[^:]: %lf", &crtt);
crtt_values[crtt_index % MAX_VALUES] = crtt;
crtt_index++;
} else if (strstr(buffer, "Time:") != NULL) {
struct tm tm;
time_t time;
char tz[10];
sscanf(buffer, "%*[^:]: %*s %*s %*s %d:%d:%d %s %d", &tm.tm_hour, &tm.tm_min, &tm.tm_sec, tz, &tm.tm_year);
tm.tm_year -= 1900;
tm.tm_mon = 0;
tm.tm_mday = 1;
time = mktime(&tm);
time_values[time_index % MAX_VALUES] = time;
time_index++;
}
}
pclose(fp);
printf("Temp values: ");
for (i = 0; i < (temp_index > MAX_VALUES ? MAX_VALUES : temp_index); i++) {
printf("%lf ", temp_values[i]);
}
printf("\n");
printf("Mu values: ");
for (i = 0; i < (mu_index > MAX_VALUES ? MAX_VALUES : mu_index); i++) {
printf("%lf ", mu_values[i]);
}
printf("\n");
printf("Dms values: ");
for (i = 0; i < (dms_index > MAX_VALUES ? MAX_VALUES : dms_index); i++) {
printf("%lf ", dms_values[i]);
}
printf("\n");
printf("Crtt values: ");
for (i = 0; i < (crtt_index > MAX_VALUES ? MAX_VALUES : crtt_index); i++) {
printf("%lf ", crtt_values[i]);
}
printf("\n");
printf("Time values: ");
for (i = 0; i < (time_index > MAX_VALUES ? MAX_VALUES : time_index); i++) {
printf("%s", ctime(&time_values[i]));
}
printf("\n");
sleep(INTERVAL);
}
return 0;
}
```
这段代码使用了 popen 函数来执行指令,并从输出中解析出相应的值。然后,我们将这些值存入相应的数组中,每个数组最多有50个值。当第51个值输入时,将第一个值舍弃,以此类推。我们可以使用模运算来实现这个循环缓冲区。
注意:在这个例子中,我们只是将值打印到控制台上,你需要根据你的需求修改代码,将这些值存储到文件中或者发送到服务器等等。
阅读全文