Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5

Перехват вывода приложений, не использующих stdout

11.03.2010, 00:52. Показов 7603. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, возникла такая проблемка: требуется отловить вывод программ, которые выводят результаты не в stdout а сразу на экран, типа как gcc или в сишной проге через printf. Внимание вопрос: кто-нибудь знает как? Буду очень признателен за любые соображения
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2010, 00:52
Ответы с готовыми решениями:

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

Перехват вывода popen
Есть задача перехватывать вывод консольной программы , ffmpeg кодировщик, хочу ловить вывод и из него извлекать текущий прогресс...

Перехват stdout
Всем добрый день! Задача: Я хочу прописать тесты используя QTest::qExec. Мне необходимо перехватить на время вывод в stdout и...

14
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.03.2010, 02:20
Цитата Сообщение от alexkolzov Посмотреть сообщение
которые выводят результаты не в stdout а сразу на экран
что-то не вяжется...
в линуксе, два стандартных вывода - stdout, stderr
по этому, любой консольный вывод, производит запись в один из них.


Цитата Сообщение от alexkolzov Посмотреть сообщение
типа как gcc или в сишной проге через printf.
printf и выводит на stdout.
0
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5
11.03.2010, 02:49  [ТС]
Стандартные вводы-выводы есть везде и аллилуя им. Только не все в них выводится, насколько я знаю, можно вывести на экран через прерывание и т.п. (давно не возился с ассемблером, не помню). И gcc как раз и делает вывод нифига не в stdout, не виришь, сделай gcc > out.txt и получишь шиш в этом файле. Собственно мне как раз и надо перехватить весь вывод gcc и записать все это в файл (это задача минимум)
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.03.2010, 02:51
Цитата Сообщение от alexkolzov Посмотреть сообщение
не виришь, сделай gcc > out.txt и получишь шиш в этом файле.
ты крупно лохонулся
не веришь, сделай gcc 2> out.txt

интересно почему? - читай мой первый пост.
0
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5
11.03.2010, 02:53  [ТС]
Сразу уточню. Пытался поймать вывод через popen, примерно так
C
1
2
3
4
5
6
7
8
FILE   *pPipe;
if( (pPipe = _popen( "gcc catch.c -o test.exe", "rt" )) == NULL )
   exit( 1 );
while( !feof( pPipe ) )
{
    if( fgets( psBuffer, 128, pPipe ) != NULL )
         printf( "Catch output: %s\n", psBuffer );
}
Это ловит вывод в stdout, но вывод gcc просто выводится на экран и в пайп не попадает
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.03.2010, 02:54
Цитата Сообщение от alexkolzov Посмотреть сообщение
но вывод gcc просто выводится на экран и в пайп не попадает
ну и правильно. читай выше.
0
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5
11.03.2010, 03:05  [ТС]
да, ты прав, все ворнинги и прочий хлам летит в поток ошибок. Вот если еще подскажешь, как с сях сделать пайп для этого потока, буду вечно признателен

Добавлено через 2 минуты
лоханулся, каюсь. забыть про поток ошибок - ошибка новичка. пора в самому в этот поток
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.03.2010, 03:21
читай -
man freopen
Добавлено через 3 минуты
еще тут почитай: http://bytes.com/topic/c/answe... ose-stdout
еще, наверное, можно при помощи dup2(fileno(stderr)).
еще, наверное, других способов куча.

так что дерзай.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.03.2010, 14:06
На мой взгляд более аккуратным решением было бы следующее:

сделать два трубопровода (pipe)
fork'нуться
в дочернем процессе через dup2 перенаправить stdout и stderr в трубопроводы
в дочернем процессе запустить exec на твою программу
в родительском процессе читать из трубопроводов

Всякие высокоуровневые интерфейсы типа system, popen и прочего хлама плохо годятся для таких задач. Они сделаны для каких-то простых случаев
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.03.2010, 14:08
Evg, почему-то мне кажется, что ТС твоего варианта не оценит.
могу даже сказать почему
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.03.2010, 14:10
Вот тут ещё почитай, но там задача немногодругая (там делается один поток ввода и один поток вывода, а утебя два потока вывода)
Трубопровод на линукс

Добавлено через 29 секунд
Цитата Сообщение от niXman Посмотреть сообщение
Evg, почему-то мне кажется, что ТС твоего варианта не оценит.
могу даже сказать почему
А куда он денется?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.03.2010, 14:11
вот и посмотрим...куда
0
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5
12.03.2010, 03:40  [ТС]
Egv, а можно поподробнее? Пример кода был бы очень кстати, если не слишком долго. А за идею спасибо.

Добавлено через 1 минуту
кстати, niXman, а что значит ТС?
0
12.03.2010, 03:53

Не по теме:

alexkolzov, ТС - топикстартер, автор темы

1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.03.2010, 11:28
Цитата Сообщение от alexkolzov Посмотреть сообщение
Egv, а можно поподробнее? Пример кода был бы очень кстати, если не слишком долго. А за идею спасибо.
Я же тебе дал ссылку в 11-м посте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2010, 11:28
Помогаю со студенческими работами здесь

Перехват stdout
Сабж. Есть консольная программка. Делает она вот что #include <iostream> #include <Windows.h> int main() { unsigned...

Перехват stdout графического приложения
ОС Win7. Возможно ли перехватывать stdout графического приложения, и если да, то как?

Разработка приложений, использующих строковые типы данных
Дан текст. Исключить из него символы, расположенные между скобками ‘(‘, ‘)’. Сами скобки тоже должны быть исключены. Предполагается, что...

Ошибка при запуске двух приложений, использующих BDE
При запуске двух приложений, использующих BDE, (имеется ввиду запуск второго, когда первое уже открыто) возникает ошибка BDE: An Error...

Разработка проектов, использующих и возможности мобильных платформ, и веб-приложений
Задался я вопросом - а что если не смотреть на поисковики (не ориентироваться на них) и делать сайты работающие и на мобильных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru