ARGV [0]に期待されているどのようなC ++からのコマンドを実行?
-
23-09-2019 - |
質問
私は、このような私のC ++プログラムから「LS」、「PWD」、「エコー」として/から/ binにコマンドを実行するexecv()
を使用しています、と私はARGVに[0]を提供しなければならない価値かと思っています。
const char * path = getPath();
char ** argv = getArgs();
execv(path,argv);
解決
argv[0]
はプログラム名であると考えられます。これは、プログラムのmain
関数に渡されます。一部のプログラムは、文字列argv[0]
が何であるかに応じて、彼らの行動を区別します。代わりにbash
のsh
を使用して呼び出された場合例えば、GNUのbash
シェルは、その機能の一部をディセーブルにします。ベストはそれをあなたがpath
に渡すのと同じ値を与えます。
Linuxでは、argv[0]
は、プロセス名は(それはおそらくtop
のエントリを読んでから取得)/proc/
ユーティリティで表示されます。
他のヒント
ARGV [0]、実行したいというコマンドのフルパスである必要があります。
私は、これはあなたが探している答えではないですが、あなたがこれをやっている理由は、特定の理由があることを知っていますか?すべてのアクションの通常system()
またはexecv()
のいずれかで実行する人々は、WindowsまたはUNIX上のライブラリで提供され、より安全でない場合、私が尋ねる理由は、より速く、より少ないの情況の誤差を受けるには、そのほとんどです。私が意味することにより、例えば、ときPATH
の変更、突然、あなたのコードは動作を停止します。
あなたは、全体的または部分的に、文字列を渡し、そしてあなたも、自分が損傷することができ、コマンドを入力することによって、システムにアクセスするユーザーに開いたまま、それを実行している場合。例えば。あなたがfind /home -name
を使用してファイルの検索を実装しました想像し、自分のユーザータイプでます:
"%" -exec rm {} \;
痛い!