Форум программистов, компьютерный форум, киберфорум
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
1

c++ unix перенаправление консольного ввода\вывода

01.06.2012, 16:07. Показов 4392. Ответов 6
Метки нет (Все метки)

Всем доброго времени суток.
Сабж. Нужно из моего приложения запустить другое и получать все данные, которое оно выводит в стандартный вывод. Также должна быть возможность передавать из приложения данные в стандартный ввод.
Рассматривал вариант с popen, но с помощью него можно перенаправить только один поток, а нужно 2.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2012, 16:07
Ответы с готовыми решениями:

Перенаправление ввода внутри команд fork() и execpv()
Пишу аналог интерпретатора bash на си (вперемешку с С++). Делаю перенаправление ввода-вывода по...

Mailslot и перенаправление ввода/вывода
Есть mailslot'ы, открытые как CreateMailslot так и CreateFile. Не удаётся перенаправить в/из них...

Использование файлового ввода-вывода вместо консольного
Как сделать так, чтобы входные файлы вводились из текстового документа, а выходные сохранялись в...

Как реализовать локализацию консольного ввода/вывода для заданного языка?
Здравствуйте, подскажите пожалуйста как добавить украинский язык в с++ в dev c++? То что я читала...

6
Псевдослучайный
1939 / 1139 / 97
Регистрация: 13.09.2011
Сообщений: 3,209
01.06.2012, 17:26 2
Два неименованных канала, fork, делаем каналы нулевым и первым дескрипторами, exec.
1
Evg
Эксперт CАвтор FAQ
21160 / 8176 / 628
Регистрация: 30.03.2009
Сообщений: 22,475
Записей в блоге: 30
01.06.2012, 23:00 3
Каналы (PIPE) на Си. Небольшая недоработка с программой


Цитата Сообщение от NumBot Посмотреть сообщение
которое оно выводит в стандартный вывод
Цитата Сообщение от NumBot Посмотреть сообщение
а нужно 2
Два чего?
1
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
03.06.2012, 01:12  [ТС] 4
стандартный вывод и стандартный ввод.
Благодарю за пример, хотя с этим я уже разобрался.
Был бы рад если бы помогли понять как обойти буферизацию стандартного ввода\вывода в некоторых приложениях. На данный момент пользуюсь переполнением буфера, но это не везде работает и довольно не красиво.
0
Evg
Эксперт CАвтор FAQ
21160 / 8176 / 628
Регистрация: 30.03.2009
Сообщений: 22,475
Записей в блоге: 30
03.06.2012, 13:43 5
Можно заиспользовать setvbuf

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h> 
#include <unistd.h>
#include <fcntl.h>
       
int main (void)
{    
  /* Можно закомментировать эту строку, чтобы понять, рак работает без неё */
  setvbuf (stdout, NULL, _IONBF, 0);
 
  printf ("a");
  sleep (1);
  printf ("b");
  sleep (1);
  printf ("\n");
  sleep (1);
 
  return 0;
}
Добавлено через 2 минуты
Если вопрос ставился как обойти буферизацию в чужом приложении без его перекомпиляции, то, думается, никак
0
Псевдослучайный
1939 / 1139 / 97
Регистрация: 13.09.2011
Сообщений: 3,209
03.06.2012, 13:47 6
Цитата Сообщение от Evg Посмотреть сообщение
обойти буферизацию в чужом приложении без его перекомпиляции
Если собрано не статически, можно подсунуть ему свою версию стандартной библиотеки. Хотя не понятно, зачем это нужно.
0
Evg
Эксперт CАвтор FAQ
21160 / 8176 / 628
Регистрация: 30.03.2009
Сообщений: 22,475
Записей в блоге: 30
03.06.2012, 15:17 7
Цитата Сообщение от NoMasters Посмотреть сообщение
Если собрано не статически, можно подсунуть ему свою версию стандартной библиотеки
С printf'ом такие пляски с бубном делаются ну очень проблематично из-за неизвестного числа аргументов. А потому финт ушами можно сделать только на ассемблере без использования стека (или при помощи больших извращений, которые на время перестраивают стек)

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

Добавлено через 36 секунд
Цитата Сообщение от NoMasters Посмотреть сообщение
Хотя не понятно, зачем это нужно
Я просто попытался трактовать твоё вопрос, потому что не было чёткого понимания, что же именно тебе надо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2012, 15:17

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

Как реализовать локализацию консольного ввода/вывода? (вывод в консоль на заданном языке)
Ребят, а можно ли сделать язык программы не русской, а например белоруской? Белорусский #include...

Написать функции для работы с массивом - выделения/освобождения памяти, консольного ввода/вывода
Напишите функции: 1) выделяющую память для массива данных типа float, 2) заполняющую ячейки...

Разработать класс "Информация о поездах" с функционалом для консольного и файлового ввода/вывода результатов
Добрый вечер, уважаемые форумчане. Новичок нуждается в вашей помощи. Есть задание на работу с...

Реализовать базовый класс "Футбольная команда" и класс-наследник с методами консольного ввода/вывода
Составить программу на языке С++, в которой описывается класс (с добавлением наследуемого...

Блокирование консольного ввода в C++
Всем привет! Хотел бы узнать: как в плюсах можно реализовать &quot;блокирование&quot; консольного ввода? То...

Обработка консольного ввода
создал консольное приложение . Хочу сделать так,чтобы при нажатии буквы С,программа закрывалась,а...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.