Не могу использовать cat для копирования из файла в другой файл, используя execlp в C

Я использую Ubuntu 16.10. Я хочу скопировать содержимое файла в другой файл, используя execlp. У меня есть два файла с именем file1 (с содержимым) и file2 (пусто). Если я дам следующую команду на терминале

test@ubuntu:~/Teme$ cat file1 > file2

Все работает отлично, но если я напишу код на C и использую это:

execlp("/bin/cat","cat","file1",">","file2",NULL);

Я получаю ошибку:

content of file1
cat: '>': No such file or directory

Я думал, что execlp принимает аргументы cat один за другим, поэтому я попытался

execlp("/bin/cat","cat","file1 > file2",NULL);

но потом я получил эту ошибку:

cat: 'file1 > file2': No such file or directory

Как я могу скопировать содержимое из файла в другой, используя execlp / execl?

1 ответ

> file2 в cat file1 > file2 аргументы не отправляются cat, Они интерпретируются оболочкой (в данном случае bash), чтобы перенаправить вывод cat в file2, Вы не можете сделать это напрямую через execlp, То, что вы делаете, является эквивалентом cat file1 \> file2 в терминале, где >, будучи экранированным, не интерпретируется оболочкой.

Вам нужно использовать system(), который использует оболочку для выполнения командной строки или перенаправления вывода с использованием таких функций C, как open() а также dup2(), Как это сделать - вопрос программирования, который относится к переполнению стека.

Другие вопросы по тегам