-3

私は現在、C コード中に Linux コマンドを呼び出す必要があるプロジェクトに取り組んでいます。system() コマンドを使用してこれを実行し、Linux シェルの値を C プログラムに保存できることを他の情報源で見つけました。

たとえば、ディレクトリを次のように変更する必要があります

 root:/sys/bus/iio/devices/iio:device1> 

そして入力

 cat in_voltage0_hardwaregain

コマンドとして。これにより、C に double が出力されます。

したがって、私のサンプルコードは次のようになります。

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

double main() {
   char directory[] = "cd /sys/bus/iio/devices/iio:device1>";
   char command[] = "cat in_voltage0_hardwaregain";
   double output;

   system(directory);
   output = system(command);

   return (0);
}

これはおそらく最善の方法ではないことを知っているので、どんな情報でも大歓迎です。

4

1 に答える 1

3

本当にやりたいことは、C プログラムを開いてファイルを直接読み取ることです。呼び出しを使用cdして使用すると、邪魔になります。catsystem

これを行う簡単な方法は次のとおりです。

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

int
main(int argc,char **argv)
{
    char *file = "/sys/bus/iio/devices/iio:device1/in_voltage0_hardwaregain";
    FILE *xfin;
    char *cp;
    char buf[1000];
    double output;

    // open the file
    xfin = fopen(file,"r");
    if (xfin == NULL) {
        perror(file);
        exit(1);
    }

    // this is a string
    cp = fgets(buf,sizeof(buf),xfin);
    if (cp == NULL)
        exit(2);

    // show it
    fputs(buf,stdout);

    fclose(xfin);

    // get the value as a double
    cp = strtok(buf," \t\n");
    output = strtod(cp,&cp);
    printf("%g\n",output);

    return 0;
}
于 2016-03-15T21:37:31.153 に答える