2017-06-17 7 views
-1

bcのexecvをCにスローする方法に疑問があります。どのようにパラメータを渡す必要がありますか?(例:3、+、2)?それはパイプのためであろうか?またはintであるにもかかわらずargvによって?そして、このエグゼクティブが子供によって投げられた場合、親はその値をパイプから読み取って収集しますか? ありがとうございました!execvp( "/ usr/bin/bc"、arg、env)

+1

'ので、あなたは' 3 + 2 'をアレンジする必要があるでしょう、次のいずれかenvについては、あなたがmain()に入ったenv、またはのように空の環境を渡すことができますその標準入力(パイプ?)に送るか、 '3 + 2'をファイルに書き出し、' bc'にファイルを処理するよう指示します。 'execvp()'システムコールは2つの引数、通常は文字列のヌルで終了するベクトルのために 'execvp(argv [0]、argv)'をとります。 'argv [0]'の値は 'bc'になります。パスを指定すると、' execv() 'の代わりに' execvp() 'を使う意味がありません。 –

+0

ありがとうございます! 私はこれを入れます: sprintf(str1、 "%d"、num1); \t \t sprintf(strop、 "%d"、operando); \t \t sprintf(str2、 "%d"、num2); \t \t strcat(str、str1); \t \t strcat(str、strop); \t \t strcat(str、str2); \t \t char * argumentos [] = {"bc"、str}; \t \t execvp( "/ usr/bin/bc"、argumentos); それでしょうか?私が3 + 2の値をパイプに渡そうとする前に、補助ファイルを作成して3 + 2を書き​​、そのファイルをbcのexecに渡そうとしました。親の結果の値を回復します。何か案は?ありがとうございました。 – ssuarez

+0

@ssuarez:このページの右側に**関連の**のセクションがあります。そこにはおそらくこの[質問](https://stackoverflow.com/questions/40995172)があります。/writing-a-term-to-bc-via-pipes-in-c)を参照してください。受け入れられた答えを確認してください。関連する質問を見るのは良いことです:) – rici

答えて

0

argは文字列でなければなりません。引数が端末に入力された場合と同じです。整数の引数が複数ある場合は、最初にそれらを文字列表現に変換する必要があります。 bc`は、引数としてファイル名を取る

char *env[] = { NULL }; 
+0

'bc'の引数はファイル名であり、式ではありません。 – rici

+0

なんらかの理由で、OPは "3、+、2"を渡します。 –

+1

もしOPが彼らがやりたいことをやっていることを知っていたら、彼らはここで質問しないでしょう。 :) 'execvp'は' env'引数も取っていません。環境を渡すには 'execvpe'が必要ですが、この場合はあまり必要ありません。 – rici

関連する問題