Como posso chamar com sucesso a função execv?

Como posso chamar com sucesso a função execv?

Estou tentando fazer um programa que copie o arquivo1 para o arquivo2 da seguinte maneira:

cp -i -p file1 file2

Agora eu chamo minha cópia executável e chamando

copy file1 file2

Ele fará a mesma coisa que o primeiro comando (-i e -p).

Eu consegui fazer isso usandoexecl

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

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

No entanto, quero fazer isso agora comexecv

Eu vi a página de manual das funções exec*

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

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

e assim o primeiro argumento parece ser o mesmo, no entanto,

execvComo é o segundo argumento a favorchar *const argv[]

o que preciso alterar na execvfunção para obter o mesmo resultado?

Eu tenho meus principais argumentos de função como os seguintes:

main(int argc,char * argv[])

Responder1

Mude seu copyarray e a chamada de função. O seguinte é um exemplo mínimo:

#include <unistd.h>

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

informação relacionada