> file2
in cat file1 > file2
não são argumentos enviados para cat
. Eles são interpretados por o shell (bash, neste caso), para redirecionar a saída de cat
para file2
. Você não pode fazer isso diretamente via execlp
. O que você está fazendo é o equivalente a cat file1 \> file2
em um terminal, onde o >
, sendo escapado, não é interpretado pelo shell.
Você precisa usar system()
, que usa um shell para executar uma string de comando ou redirecionar a saída usando C funciona como open()
e dup2()
. Como fazer isso é uma questão de programação, que pertence ao Stack Overflow.