Перенаправление stdout в область памяти (или файл)


Перенаправление потока stdin в файл и обратно в консоль

Будьте добры, ткните неопытного в нужное русло.

Добавлено через 28 минут
Узнал. Для того, чтобы вернуть поток stdin или stdout на свои места нужно написаь соответственно:
freopen(«CONIN$», «r+», stdin); или
freopen(«CONOUT$», «r+», stdout);

11.04.2020, 21:02

Чтение посредством fgets() из потока stdin
Есть функция инициализации полей структуры void initialize (student* s1) < printf("Enter the.

Перенаправление потока
Как можно связать поток stdin с консолью, когда он ранее был перенаправлен в файл следующей.

Перенаправление потока в файл и обратно
проблема следующая. функция вызывается в меню, вводим файл, вводим строку, а потом в консоль ничего.

Перенаправление потока в файл
Здравствуйте. Делаю устройство на OpenWrt, которое общается с STM32 по UART. Проблема заключается в.

Перенаправление потока ошибок в файл $3
нужно найти все файлы в директории, подсчитать их размер и количество . вывести всё в файл . с.

перенаправление stdout и stderr

Запись создана декабря 21, 2009

Коротко и ясно расскажу о пере направлении stdout и stderr. stdout это нормальный вывод, stderr это ошибки.

красным выделен stderr, а синим stdout. По умолчанию в output отправляется и stdout и stderr.

перенаправления stdout в /tmp/stdout используйте конструкцию:

для перенаправления stderr в /tmp/stderr используйте конструкцию:

Для перенаправления sterr и stdout в файл /tmp/all используйте конструкцию:

Есть вариант когда stderr и stdout отправляются в output и в файл. Это удобно для отладки интерактивных скриптов. Делается это через tee.

ну и пара практических вариантов, отправка stdout и stderr на электронную почту:

] # ls /opt/ /blah 2>&1 | mail root@localhost

Перенаправление stdout в файл

0 Baz [2013-01-18 19:05:00]

Я отлаживаю некоторый код спагетти, который записывает на терминал через std :: cout и через стороннюю библиотеку tecla:

Я хотел бы привязать себя к stdout, чтобы я мог перенаправить его в файл. Перед сохранением в файл я могу преобразовать строки в шестнадцатеричные представления, чтобы я мог легче идентифицировать все управляющие символы, которые они содержат.

Я также могу записать в этот файл различные события внутри программы, чтобы лучше понять, как работает программа.

Любые предложения о том, как я могу это сделать?

ОБНОВИТЬ

Моя программа также получает команды на терминале через вход std. Кажется, делает:

myprogram 9889> output.txt

myprogram 9889 | XXD

нарушает программу таким образом, что я не могу заставить программу отвечать на введенные команды.

Запрос (>) не появляется в файле output.txt.


5 ответов

1 leemes [2013-01-18 19:12:00]

Если вы находитесь в системе UNIX-oid, помимо непосредственного хранения в файле (как видно из других ответов), вы можете просмотреть его в кодировке HEX и просмотреть его с помощью клавиш курсора, объединив hexdump и less :

Результат выглядит следующим образом:

Чтобы просмотреть (просматривать с помощью меньше) + сохранить файл в синтаксическом режиме, просто добавьте команду tee в этот командный канал:

Чтобы также включить вывод stderr в файл/представление, объедините два канала перед его обработкой, добавив в командную строку процесса 2>&1 :

Запись в std::cout — очень плохая практика, за исключением небольших тестовых программ. Но поскольку вы застряли с ним, в коде вы не можете изменение: возможно изменить streambuf на который пишет поток, с чем-то вроде следующего:

Тогда просто объявите его где-нибудь:

и пока переменная находится в области видимости, std::cout будет выводить на указанный вами файл.

Илон Маск рекомендует:  Применение ado для работы с бд (c builder)

0 jthill [2013-01-18 21:15:00]

Если программа, которую вы отлаживаете, чувствительна к тому, разговаривает ли она с терминалом, вы можете посмотреть screen , в частности его возможности ведения журнала.

Просто запустите свою программу, набрав:

Затем просмотрите файл output.txt с помощью шестнадцатеричного редактора, такого как WinHex или ghex2.

Перенаправление вывода в файл — это то, что вы обычно делаете в командной строке, а не внутри самого кода. Например:

перенаправление потоков stdin/stdout в файл и обратно

насчет в файл все понятно либо freopen(. ) либо fopen(..) dup2(..) а вот обратно как. если кто знает подскажите пожалуйста.

Точно так же: dup на stdin/stdout, чтобы сохранить эти дескрипторы, open+dup2, чтобы переназначить, dup2, чтобы вернуть обратно сохраненные значения.

хотя я наверно неправильно объяснил корч такая проюлема freopen(filename,«w»,stdout); закрывает stdout как его окрыть обратно??

тебе же объяснили — делаешь копию через dup, затем юзаешь freopen, затем возвращаешь снова через dup

mirsovetov.net

Андрощук Александр, ИТ решения, советы, заметки…

Перенаправление Windows cmd stdout и stderr в один файл

Задача: Нужно перенаправление Windows cmd stdout и stderr в один файл
Инструменты: Windows Command Line
Решение:
Для перенаправления потока в файл, можно воспрользоваться специальным символом >, который нужно вставить между командами.

Для перенаправления потока c ошибками (он имеет файловый дескриптор 2. Более подробно о перенаправлении потоков и файловых дексрипторах можно почитать на wiki) Нужно перенаправить стандартный вывод ошибок в файл.

Дескриптор Название Описание
stdin Стандартный ввод
1 stdout Стандартный вывод
2 stderr Стандартный вывод ошибок

Перенаправим теперь поток с ошибками в стандартный поток. 2>&1

Перенаправление ввода вывода Linux

Одна из самых интересных и полезных тем для системных администраторов и новых пользователей, которые только начинают разбираться в работе с терминалом — это перенаправление потоков ввода вывода Linux. Эта особенность терминала позволяет перенаправлять вывод команд в файл, или содержимое файла на ввод команды, объединять команды вместе, и образовать конвейеры команд.

В этой статье мы рассмотрим как выполняется перенаправление потоков ввода вывода в Linux, какие операторы для этого используются, а также где все это можно применять.

Как работает перенаправление ввода вывода

Все команды, которые мы выполняем, возвращают нам три вида данных:


  • Результат выполнения команды, обычно текстовые данные, которые запросил пользователь;
  • Сообщения об ошибках — информируют о процессе выполнения команды и возникших непредвиденных обстоятельствах;
  • Код возврата — число, которое позволяет оценить правильно ли отработала программа.

В Linux все субстанции считаются файлами, в том числе и потоки ввода вывода linux — файлы. В каждом дистрибутиве есть три основных файла потоков, которые могут использовать программы, они определяются оболочкой и идентифицируются по номеру дескриптора файла:

  • STDIN или 0 — этот файл связан с клавиатурой и большинство команд получают данные для работы отсюда;
  • STDOUT или 1 — это стандартный вывод, сюда программа отправляет все результаты своей работы. Он связан с экраном, или если быть точным, то с терминалом, в котором выполняется программа;
  • STDERR или 2 — все сообщения об ошибках выводятся в этот файл.

Перенаправление ввода / вывода позволяет заменить один из этих файлов на свой. Например, вы можете заставить программу читать данные из файла в файловой системе, а не клавиатуры, также можете выводить ошибки в файл, а не на экран и т д. Все это делается с помощью символов » «.

Перенаправить вывод в файл

Все очень просто. Вы можете перенаправить вывод в файл с помощью символа >. Например, сохраним вывод команды top:

top -bn 5 > top.log

Опция -b заставляет программу работать в не интерактивном пакетном режиме, а n — повторяет операцию пять раз, чтобы получить информацию обо всех процессах. Теперь смотрим что получилось с помощью cat:

Символ «>» перезаписывает информацию из файла, если там уже что-то есть. Для добавления данных в конец используйте «>>». Например, перенаправить вывод в файл linux еще для top:

top -bn 5 >> top.log

По умолчанию для перенаправления используется дескриптор файла стандартного вывода. Но вы можете указать это явно. Эта команда даст тот же результат:

Илон Маск рекомендует:  Что такое код getcharwidth

top -bn 5 1>top.log

Перенаправить ошибки в файл

Чтобы перенаправить вывод ошибок в файл вам нужно явно указать дескриптор файла, который собираетесь перенаправлять. Для ошибок — это номер 2. Например, при попытке получения доступа к каталогу суперпользователя ls выдаст ошибку:

Вы можете перенаправить стандартный поток ошибок в файл так:

ls -l /root/ 2> ls-error.log
$ cat ls-error.log

Чтобы добавить данные в конец файла используйте тот же символ:

ls -l /root/ 2>>ls-error.log

Перенаправить стандартный вывод и ошибки в файл

Вы также можете перенаправить весь вывод, ошибки и стандартный поток вывода в один файл. Для этого есть два способа. Первый из них, более старый, состоит в том, чтобы передать оба дескриптора:

ls -l /root/ >ls-error.log 2>&1

Сначала будет отправлен вывод команды ls в файл ls-error.log c помощью первого символа перенаправления. Дальше в тот же самый файл будут направлены все ошибки. Второй метод проще:

ls -l /root/ &> ls-error.log

Также можно использовать добавление вместо перезаписи:

ls -l /root/ &>> ls-error.log

Стандартный ввод из файла

Большинство программ, кроме сервисов, получают данные для своей работы через стандартный ввод. По умолчанию стандартный ввод ожидает данных от клавиатуры. Но вы можете заставить программу читать данные из файла с помощью оператора » cat

Вы также можете сразу же перенаправить вывод тоже в файл. Например, пересортируем список:

Таким образом, мы в одной команде перенаправляем ввод вывод linux.


Использование тоннелей

Можно работать не только с файлами, но и перенаправлять вывод одной команды в качестве ввода другой. Это очень полезно для выполнения сложных операций. Например, выведем пять недавно измененных файлов:

ls -lt | head -n 5

С помощью утилиты xargs вы можете комбинировать команды таким образом, чтобы стандартный ввод передавался в параметры. Например, скопируем один файл в несколько папок:

echo test/ tmp/ | xargs -n 1 cp -v testfile.sh

Здесь параметр -n 1 задает, что для одной команды нужно подставлять только один параметр, а опция -v в cp позволяет выводить подробную информацию о перемещениях. Еще одна, полезная в таких случаях команда — это tee. Она читает данные из стандартного ввода и записывает в стандартный вывод или файлы. Например:

echo «Тест работы tee» | tee file1

В сочетании с другими командами все это может использоваться для создания сложных инструкций из нескольких команд.

Выводы

В этой статье мы рассмотрели основы перенаправления потоков ввода вывода Linux. Теперь вы знаете как перенаправить вывод в файл linux или вывод из файла. Это очень просто и удобно. Если у вас остались вопросы, спрашивайте в комментариях!

Shell: перенаправление stdout и stderr

В UNIX-системах имеется три файловых дескриптора- stdin , stdout и stderr ( std == standard).

Используя их вы можете:

  1. перенаправить stdout в файл;
  2. перенаправить stderr в файл;
  3. перенаправить stdout в stderr ;
  4. перенаправить stderr в stdout ;
  5. перенаправить stderr и stdout в файл;
  6. перенаправить stderr и stdout в stdout ;
  7. перенаправить stderr и stdout в stderr .

Для stdout используется дескриптор 1, а для stderr — 2.

stdout в файл

Что бы перенаправить выходные данные программы в файл:

Тут ls-l.txt — это имя файла, который будет создан (если не существует, иначе — он будет перезаписан), и в который будут записаны данные, которые вы видите на экране, выполняя команду ls -l .

stderr в файл

Что бы перенаправить стандартный поток ошибок в файл — используйте:

В результате будет создан файл grep-errors.txt , который будет содержать в себе данные из stderr после выполнения grep da * .

stdout в stderr

Следующий пример перенаправит stdout в stderr :

stderr в stdout

И наоборот — что бы перенаправить stderr в stdout — используйте:

stderr и stdout в file

Иногда требуется перенаправить все данные в файл. Это может пригодиться в cron -задачах, что бы команда выполнялась в полной «тишине»:

Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.

Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.

Когда программа начинает выполняться, автоматически открываются пять потоков. Эти потоки — стандартный ввод (stdin), стандартный вывод (stdout), стандартный вывод для сообщений об ошибках (stderr), стандартный последовательный порт (stdaux) и стандартное устройство печати (stdprn).

Илон Маск рекомендует:  Что такое код segread


По умолчанию стандартный ввод/вывод и стандартный вывод сообщений об ошибках связывается с консольным терминалом.

Назначения по умолчанию для стандартного порта и стандартного устройства печати зависят от конфигурации аппаратуры компьютера; эти потоки обычно связываются с последовательным портом и принтером, но могут быть и не установлены в отдельных системах.

Следующие указатели на структуру типа. FILE определяются в файле stdio.h и могут использоваться в любом месте как указатели потоков:

extern FILE * stdin; — стандартный ввод

extern FILE * stdout; — стандартный вывод

extern FILE * stderr; — стандартный вывод сообщений об ошибках

extern FILE * sidaux; — стандартный порт

extern FILE * stdprn; — стандартное устройство печати

При запуске оттранслированной программы на выполнение можно использовать символы перенаправления в/в из командного языка MS-DOS ( или >> ) для переопределения стандартного ввода и вывода программы.

Можно переопределить stdin, stdout, stderr, stdaux или stdprn так, что они будут относиться к файлу на диске или устройству. Такие возможности предоставляет функция freopen.

Перенаправление `sys.stdout` в файл или буфер

Я работаю в Python 3.4, и у меня есть поведение, которое я не понимаю: если я перенаправляю stdout в файл, я могу захватить текст из дочерних процессов. Однако, когда я перенаправляюсь к файловому объекту Python, я перестаю захватывать этот вывод. Я хотел бы объяснить объяснение (последующего) поведения.

Контекстный менеджер redirect_stdout в Python 3.4 упрощает захват stdout (в данном случае).

Затем я могу просто вызвать script, чтобы получить следующий вывод:

Это именно то, что я хочу, и прекрасно работает.

Моя путаница проистекает из того, что если я, если переключу TemporaryFile на TextIOWrapper , изменится поведение моего script.

Теперь, когда я вызываю программу, я теряю вывод из разветвленного процесса.

Перенаправление стандартных ввода-вывода и ошибок

С помощью переназначения устройств ввода/вывода одна программа может направить свой вывод на вход другой или перехватить вывод другой программы, используя его в качестве своих входных данных. Таким образом, имеется возможность передавать информацию от процесса к процессу при минимальных программных издержках. Практически это означает, что для программ, которые используют стандартные входные и выходные устройства, операционная система позволяет:

  • выводить сообщения программ не на экран (стандартный выходной поток), а в файл или на принтер (перенаправление вывода);
  • читать входные данные не с клавиатуры (стандартный входной поток), а из заранее подготовленного файла (перенаправление ввода);
  • передавать сообщения, выводимые одной программой, в качестве входных данных для другой программы (конвейеризация или композиция команд).

Из командной строки эти возможности реализуются следующим образом. Для того, чтобы перенаправить текстовые сообщения, выводимые какой-либо командой из командной строки, в текстовый файл, нужно использовать конструкцию команда > имя_файла. Если при этом заданный для вывода файл уже существовал, то он перезаписывается (старое содержимое теряется), если не существовал создается. Можно также не создавать файл заново, а дописывать информацию, выводимую командой, в конец существующего файла. Для этого команда перенаправления вывода должна быть задана так: команда >> имя_файла. С помощью символа ping.txt

2. Добавление текста справки для команды XCOPY в файл copy.txt: XCOPY /? >> copy.txt

В случае необходимости сообщения об ошибках (стандартный поток ошибок) можно перенаправить в текстовый файл с помощью конструкции команда 2> имя_файла В этом случае стандартный вывод будет производиться на экран. Также имеется возможность информационные сообщения и сообщения об ошибках выводить в один и тот же файл. Делается это следующим образом: команда > имя_файла 2>&1

Например, в приведенной ниже команде стандартный выходной поток и стандартный поток ошибок перенаправляются в файл copy.txt: XCOPY A:\1.txt C: > copy.txt 2>&1

  • Функциональные клавиши командной строки В командной строке имеются функциональные клавиши.
  • Создание цепочки команд в командной строке Синтаксис группировки команд может быть разным в.

«>Группировка команд командной строки — 16/08/2013 06:49
Запуск командной строки При запуске командной строки можно указывать аргументы: ключи.

«>Управление запуском командной строки — 16/08/2013 06:39
Команда Help — сведения об определенной команде Для получения справочной информации, наберите в.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL