
次のように、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番目の引数execv
はchar *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);
}