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