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

0

В настоящее время я пытаюсь написать свою собственную оболочку bash, а входное перенаправление вывода отлично работает, но у меня возникают проблемы с реализацией "<<<".

Например, если я набираю cat <<< "Hello world", он должен отображать "Hello world".

Для других io-редиректоров, таких как <и>, я использовал системные вызовы open и dup, но для этого это не сработает, если только я не создаю временный текстовый файл.

Есть ли способ сделать это без создания временного файла?

Я пытался

int fd[2];
pipe(fd);
write(fd[1], string, strlen(string));
dup2(fd[1], 0);
  • 2
    Добро пожаловать на ТАК! Пожалуйста, прочитайте справочный центр, чтобы узнать о правилах размещения вопросов здесь. Этот вопрос неясен / слишком широк. Объясните проблему более прямо, представьте свои попытки решить ее и расскажите нам, каким образом они потерпели неудачу. Кроме того, вы спрашиваете «могу ли я использовать их для этого» - что действительно странно - почему бы просто не попробовать сами?
  • 0
    Используйте strace чтобы узнать, что делает bash , или погрузитесь в исходный код GNU bash
Показать ещё 1 комментарий
Теги:

1 ответ

1

Самый простой способ - создание безымянной трубы. См. man 3 pipe. Но в основном эта функция создаст два fds: один для чтения, другой для записи. Все, что написано на одной стороне, будет прочитано с другой.

Затем напишите строку на конец письма и установите конец чтения в качестве STDIN нового процесса.

  • 0
    Я использовал трубу для "|", но я не уверен, как я могу использовать это здесь. Мне не нужно форк, потому что я вызываю execvp только один раз, верно?
  • 0
    @KennethHuang: Ну, вам придется один раз раскошелиться, иначе вы потеряете раковину. Но самым простым способом было бы снова раскошелиться и сделать так, как будто echo "Hello world" | cat

Ещё вопросы

Сообщество Overcoder
Наверх
Меню