![execv関数を正常に呼び出すには? [閉鎖]](https://linux33.com/image/83795/execv%E9%96%A2%E6%95%B0%E3%82%92%E6%AD%A3%E5%B8%B8%E3%81%AB%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
次のように、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);
}