как использовать команду cat в системном вызове execl для создания текстового файла?

#c #linux #shell #ubuntu #system-calls

#c #linux #оболочка #ubuntu #системные вызовы

Вопрос:

Как я могу создать текстовый файл с помощью команды cat, используя системный вызов execl в c

я попытался использовать

 execl("/bin/cat", "cat", ">", "test.txt", NULL);
  

но это дает мне ошибку ввода-вывода

Ответ №1:

Проблема в том, что перенаправление с > помощью обрабатывается вызывающей оболочкой cat , а не само по cat себе. Самое простое решение sh — вместо этого вызвать и позволить ему вызывать cat и обрабатывать перенаправление:

 execl("/bin/sh", "sh", "-c", "/bin/cat > test.txt", (char *) NULL);
  

Альтернативой было бы открыть файл самостоятельно (с open помощью ), закрыть стандартный вывод, дублировать дескриптор файла в fd 1 (путем вызова dup2 ) и, наконец, закрыть первый дескриптор файла. Затем вы можете вызвать execl , разрешив cat запись в стандартный вывод. Это в основном то, что делает оболочка, но гораздо проще позволить sh сделать это за вас.