簡體   English   中英

c program(linux):獲取命令行輸出到變量並過濾數據

[英]c program (linux): get command line output to a variable and filter data

我有一個運行以下命令的ac程序:

system("sudo grep '' /sys/class/dmi/id/board_*")

並在命令行上輸出。

我希望輸出存儲在c程序中的某個變量中,這樣我就可以過濾board_serial

看看popen 這是一個如何使用它來捕獲程序輸出的簡單示例:

#include<stdio.h>

int main()
{
    FILE *p;
    p = popen("ls -l", "r");

    if(!p) {
        fprintf(stderr, "Error opening pipe.\n");
        return 1;
    }

    while(!feof(p)) {
        printf("%c", fgetc(p));
    }

    if (pclose(p) == -1) {
        fprintf(stderr," Error!\n");
        return 1;
    }

    return 0;
}

但是,看起來你只想從文件中讀取一些值,對嗎? 我更願意打開( fopen() )具有內部值的文件,並將這些值讀取到我的C程序中的變量。 嘗試這樣的事情(只是一個簡單的例子):

#include<stdio.h>
#include<stdlib.h>

#define MAX 100

int main()
{
    FILE *fp;
    char result[MAX];
    int i;
    char c;

    fp = fopen("/sys/class/dmi/id/board_name", "r");

    if(!fp) {
        fprintf(stderr, "Error opening file.\n");
        return 1;
    }

    i = 0;
    while((c = fgetc(fp)) != EOF) {
        result[i] = c;
        i++;
    }
    result[i] = '\0';

    printf("%s", result);
    i = atoi(result);
    printf("%d", i);

    if (fclose(fp) == -1) {
        fprintf(stderr," Error closing file!\n");
        return 1;
    }

    return 0;
}

最簡單的方法是將輸出重定向到文件,然后讀取該文件以解析輸出。

system("sudo grep '' /sys/class/dmi/id/board_* 1>out.txt 2>err.txt");
fd_out = fopen("out.txt", "r");
fd_err = fopen("err.txt", "r");

或者你可以使用popen功能。

fd_out = popen("sudo grep '' /sys/class/dmi/id/board_*", "r");

使用dup或dup2將標准輸出fd復制到文件fd

男人dup / dup2

是popen絕對是最好的選擇。 看看這里

       http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM