2017-02-28 12 views
0

私のスクリプトからCコードを使用して戻り値を取得したいとします。 私のスクリプトが別のパーティションにある考えてみて、私はそのパーティションをマウントしていると私のような呼び出しています、Cコードを使用してシェルスクリプトから戻り値を取得する方法

value=system("./mnt1/myscript.img"); 

私はmyscript.imgファイル内の1つの機能を必要とし、それは一つの値を返す必要があります(例:mmcpart) どのように私は戻り値を得るためにスクリプトをフレーム化します。誰も私がこの問題を解決するのを助けることができます。 ありがとうございます。

答えて

0

あなたが本当に必要とするのは、あなたのスクリプトを実行できるパイプとフォークとexecvpです。このようなものはあなたのために働くはずです

int mypipe[2]; 
    if(pipe(mypipe) == -1) { 
     perror("Pipe creation failed"); 
     exit(1); 
    } 

    if(fork() == 0)   //first fork 
    { 
     close(STDOUT_FILENO); //closing stdout 
     dup(mypipe[1]);   //replacing stdout with pipe write 
     close(mypipe[0]);  //closing pipe read 
     close(mypipe[1]); 

     const char* myprog[] = { "ps", "-ef", 0}; 
     execvp(myprog[0], myprog); 
     perror("error in execvp for ps command"); 
     exit(1); 
    } 

    char str[200]; 
    FILE* fp = fdopen(mypipe[0], "r"); 

    while (fgets(str, 200, fp) != 0) { 
      printf("%s\n", str); 
    } 
+1

'fork()'の呼び出しが失敗した場合、この回答は説明できません。むしろ、呼び出しが成功したものとみなします。 – user3629249

1

シェルスクリプトの出力をファイルに書き込み、Cプログラムからファイルの内容を読み込むことができます。

Cプログラムは、シェルスクリプトプロセスが完了したときにのみ、ファイルを読み込もうとしなければなりません。 = 0.

シェルスクリプトファイルの名前を.profileファイルに入れると、自動的にシェルスクリプトが実行されます。

シェルスクリプトプログラミングは強力なファイル処理コマンドを備えているため、ファイルへの書き込みは問題にはなりません。

** tee **コマンドが使用されている理由がわかりません。出力をSTDOUTにも送りたいですか?

+0

ありがとう...私はこれが助けになると思います、私は試してみてください..... –

+0

ファイルを開く方法....私は起動時にスクリプトを実行しています...私は次のことを試しましたが、 (1)cat> filename << - "EOF" echo "$ {mmcpart}" | tee info.txt echo "$ {root_fs}" | tee -a info.txt EOF(2)echo "$ {mmcpart}" | tee info.txt echo "$ {root_fs}" | tee -a info.txt それが動作していません.......... –

+0

シェルスクリプトファイルの名前を.profileファイルに入れることができ、シェルスクリプトを自動的に実行します。 – subir

関連する問題