0

次のようなファイルを実行しようとしています。

./foo bar baz band

どこ

executable = "foo"
path_executable =" bar baz band"

そして、snprintfを使用して連結し、execlpを使用してプロセスをフォークしています

snprintf(final_executable, sizeof final_executable, "%s%s%s","./",executable,path_executable);
snprintf(for_execlp, sizeof for_execlp,"%s%s","./",executable);

そして、これは私が以前の知識に基づいて試したことです。

アプリケーションfooを正しく実行できません。

execlp(for_execlp,for_execlp,path_executable, (char *)0);

エラーの場所を教えてください..ここで立ち往生しています!

私の完全なコード

コマンドラインで、次のコマンドを実行する必要があります。

./blackscholes 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt
4

1 に答える 1

0

final_executableととは何for_execlpですか? sizeof final_executablesize 引数として に渡していますsnprintf()が、final_executableおそらく であるchar *ためsizeof、使用可能なストレージのサイズではなく、ポインターのサイズに評価されます。

snprintf()呼び出しの戻り値を確認していますか?

fooまた、「アプリケーションを正しく実行できない」とはどういう意味ですか? が失敗した場合execlp()、戻り値は何ですか?


のコードに基づく更新http://pastebin.com/vyrxWWLK:

罰金。したがって、からmain()、関数を呼び出しますrun_apps("blackscholes"," 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt")。ではrun_apps()、文字列の配列を作成するため、sizeof正しいです。配列snprintf()に書き込むため"/parsec/parsec-3.0/pkgs/apps/blackscholes/inst/arm-linux.gcc/bin/"に使用します。次に、無意味に文字列を配列に書き込み、文字列を配列に書き込み、 を呼び出します。これは に展開されます。最初の (そして唯一の) コマンドライン引数はであることに注意してください。それはあなたが意図したものですか?path_to_executablechdir()snprintf()"./blackscholes 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt"final_executable"./blackscholes"for_execplexeclp(for_execlp,for_execlp,path_executable, (char *)0);execlp("./blackscholes","./blackscholes"," 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt", NULL);" 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt"

しかし、あなたは の戻り値をチェックしておらず、「アプリケーションを正しくexeclp()実行できない」ことがあなたにとって何を意味するのかまだ言っていません. foo、単にexeclp()間違って使用していること。ただし、execlp()実際には失敗している可能性があります。その場合、コードが実行していない潜在的なエラーを処理する必要があります。

于 2013-07-09T16:30:49.353 に答える