execv 関数を正常に呼び出すにはどうすればよいですか?

execv 関数を正常に呼び出すにはどうすればよいですか?

次のように、file1 を file2 にコピーするプログラムを作成しようとしています。

cp -i -p file1 file2

実行可能なコピーを呼び出すので、

copy file1 file2

最初のコマンド (-i および -p) と同じことを行います。

私はこれを使ってexecl

char const *copy[] = {"/bin/cp","cp","-p","-i",0};

execl(copy[0],copy[1],copy[2],copy[3],argv[1],argv[2],copy[4]);

しかし、私は今それをやりたいexecv

exec*関数のマニュアルページを見た

execl(const char *path, const char *arg, ...);

execv(const char *path, char *const argv[]);

最初の議論は同じように見えますが、

の2番目の引数execvchar *const argv[]

execv同じ結果を得るには関数内で何を変更する必要がありますか?

メイン関数の引数は次のようになります。

main(int argc,char * argv[])

答え1

copy配列と関数呼び出しを変更します。以下は最小限の例です。

#include <unistd.h>

int main(int arcg, char *argv[])
{
    char *const args[] = {"cp","-p","-i", argv[1], argv[2], 0}; 
    execv("/bin/cp", args);
}

関連情報