私は次のコマンドを実行するacプログラムを持っています:
system("sudo grep '' /sys/class/dmi/id/board_*")
コマンドラインで出力します。
をフィルタリングできるように、出力をcプログラムの変数に格納したいと思いますboard_serial
。
私は次のコマンドを実行する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;
}
dupまたはdup2を使用して、標準出力fdをファイルfdに複製します
はい popen は間違いなく最良の選択です。こちらをご覧ください
http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html
最も簡単な方法は、出力をファイルにリダイレクトし、そのファイルを読み取って出力を解析することです。
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");