#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
сделать это за вас.