Не могу использовать 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(), Как это сделать - вопрос программирования, который относится к переполнению стека.