Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
#1

Вернуть stdin в консоль - C++

11.07.2010, 21:49. Просмотров 2592. Ответов 10
Метки нет (Все метки)

Допустим я перенаправил поток stdin/stdout в файл с помощью функции freopen. Как заставить его снова работать с консолью?

Добавлено через 9 минут
Нашел.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdlib>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
int main()
{
    freopen("output.txt","wt",stdout);
    printf("hello, file");
    freopen("CON","wt",stdout);
    printf("hello, console");
    getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.07.2010, 22:27     Вернуть stdin в консоль #2
C++
1
2
3
4
5
6
7
int main(){
const FILE* f = stdin;
//.....
stdin = f;
printf("hellhell!");
return 0;
}
думаю примерно так
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
11.07.2010, 22:31  [ТС]     Вернуть stdin в консоль #3
Компилер сказал, что stdin не l-value.
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.07.2010, 22:37     Вернуть stdin в консоль #4
ну все правильно, это работает для си

для винды можно воспользоваться
http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx GetStdHandle
Evg
Эксперт CАвтор FAQ
17266 / 5520 / 343
Регистрация: 30.03.2009
Сообщений: 15,024
Записей в блоге: 26
11.07.2010, 23:22     Вернуть stdin в консоль #5
http://www.manpagez.com/man/3/freopen/

The freopen() function opens the file whose name is the string pointed to by filename and associates the stream pointed to by stream with it. The original stream (if it exists) is closed.
Подозреваю, что никак, но полной уверенности нет
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
11.07.2010, 23:23  [ТС]     Вернуть stdin в консоль #6
Ну млин, я ж уже показал решение.
Evg
Эксперт CАвтор FAQ
17266 / 5520 / 343
Регистрация: 30.03.2009
Сообщений: 15,024
Записей в блоге: 26
11.07.2010, 23:24     Вернуть stdin в консоль #7
Цитата Сообщение от Хохол Посмотреть сообщение
C
1
freopen("CON","wt",stdout);
Это ОС-зависимый способ (т.е. не универсальный). В случае unix'а вместо "CON" нужно писать "/dev/stdout"
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
11.07.2010, 23:26  [ТС]     Вернуть stdin в консоль #8
А, ну это да. Будем считать, что меня интересовало конкретно в винде.
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.07.2010, 23:28     Вернуть stdin в консоль #9
cтранно это однако, хотя наверно это не так и нужно вообще
Evg
Эксперт CАвтор FAQ
17266 / 5520 / 343
Регистрация: 30.03.2009
Сообщений: 15,024
Записей в блоге: 26
11.07.2010, 23:31     Вернуть stdin в консоль #10
Цитата Сообщение от alex_x_x Посмотреть сообщение
cтранно это однако, хотя наверно это не так и нужно вообще
А что странного? В документации в общем-то чётко сказано, что файл закрывается. Способов инициализировать stdin, stdout, stderr на уровне пользователя вроде бы как нет в стандарте
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2010, 23:33     Вернуть stdin в консоль
Еще ссылки по теме:

C++ Перевод stdin c файла на клавиатуру
C++ stdin
C++ std::fflush(stdin);
C++ Код после while( ! feof( stdin ) не компилируется
C++ Библиотека stdin

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.07.2010, 23:33     Вернуть stdin в консоль #11
это я не туда
не, все правильно
Yandex
Объявления
11.07.2010, 23:33     Вернуть stdin в консоль
Ответ Создать тему
Опции темы

Текущее время: 13:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru