質問

私は、このような私のC ++プログラムから「LS」、「PWD」、「エコー」として/から/ binにコマンドを実行するexecv()を使用しています、と私はARGVに[0]を提供しなければならない価値かと思っています。

const char * path = getPath();
char ** argv = getArgs();

execv(path,argv);
役に立ちましたか?

解決

argv[0]はプログラム名であると考えられます。これは、プログラムのmain関数に渡されます。一部のプログラムは、文字列argv[0]が何であるかに応じて、彼らの行動を区別します。代わりにbashshを使用して呼び出された場合例えば、GNUのbashシェルは、その機能の一部をディセーブルにします。ベストはそれをあなたがpathに渡すのと同じ値を与えます。

Linuxでは、argv[0]は、プロセス名は(それはおそらくtopのエントリを読んでから取得)/proc/ユーティリティで表示されます。

他のヒント

ARGV [0]、実行したいというコマンドのフルパスである必要があります。

私は、これはあなたが探している答えではないですが、あなたがこれをやっている理由は、特定の理由があることを知っていますか?すべてのアクションの通常system()またはexecv()のいずれかで実行する人々は、WindowsまたはUNIX上のライブラリで提供され、より安全でない場合、私が尋ねる理由は、より速く、より少ないの情況の誤差を受けるには、そのほとんどです。私が意味することにより、例えば、ときPATHの変更、突然、あなたのコードは動作を停止します。

あなたは、全体的または部分的に、文字列を渡し、そしてあなたも、自分が損傷することができ、コマンドを入力することによって、システムにアクセスするユーザーに開いたまま、それを実行している場合。例えば。あなたがfind /home -nameを使用してファイルの検索を実装しました想像し、自分のユーザータイプでます:

"%" -exec rm {} \;

痛い!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top