web-dev-qa-db-ja.com

どうすればexec関数を正常に呼び出すことができますか?

次の方法で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 *関数のmanページを見ました

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

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

したがって、最初の引数は同じように見えますが、

execvの2番目の引数はchar *const argv[]

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

私の主な関数引数は次のようになっています。

main(int argc,char * argv[])
1
alkabary

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);
}
2
muru