Команда cat
. >
интерпретируется оболочкой, перенаправляя стандартный вывод команды в указанный c файл.
Таким образом, вам необходимо подключить стандартный вывод (дескриптор файла 1) процесса, выполняющего cat
в файл:
/* emulating `cat >file` */
int fd = open("file", …);
/* use our own fd 1 */
dup2(fd, 1);
close(fd);
/* with new stdout, exec `cat` */
exec("cat");