В настоящее время я пытаюсь написать свою собственную оболочку bash, а входное перенаправление вывода отлично работает, но у меня возникают проблемы с реализацией "<<<".
Например, если я набираю cat <<< "Hello world"
, он должен отображать "Hello world".
Для других io-редиректоров, таких как <и>, я использовал системные вызовы open и dup, но для этого это не сработает, если только я не создаю временный текстовый файл.
Есть ли способ сделать это без создания временного файла?
Я пытался
int fd[2];
pipe(fd);
write(fd[1], string, strlen(string));
dup2(fd[1], 0);
Самый простой способ - создание безымянной трубы. См. man 3 pipe
. Но в основном эта функция создаст два fds: один для чтения, другой для записи. Все, что написано на одной стороне, будет прочитано с другой.
Затем напишите строку на конец письма и установите конец чтения в качестве STDIN нового процесса.
echo "Hello world" | cat
strace
чтобы узнать, что делаетbash
, или погрузитесь в исходный код GNUbash