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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
#1

Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней? - C++

16.08.2014, 16:57. Просмотров 265. Ответов 7
Метки нет (Все метки)

Система ввода-вывода С++ основана на работе с потоками. Потоки в свою очередь являются абстрактными объектами с логическим интерфейсом и файлом, где файл - это любой носитель данных. Стандартные потоки (cout, cin, cerr, clog, wcout, wcin, wcerr, wclog) С++ связаны с консолью, т.е. cmd.

Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2014, 16:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней? (C++):

Два потока выводят информацию в консоль - C++
Дана задача: Два потока выводят информацию в консоль. Один выводит время прошедшее с момента запуска ОС, другой позицию курсора...

Есть ли возможность запускать jar файлы которые выводят лог в консоль, без ввода? - Java
Доброго времени суток! Хотел узнать есть ли возможность запускать jar файлы которые выводят лог в консоль, без ввода вроде как...

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

Флешка не показывает всю информацию, которая на ней есть - Flash-память
Приветствую знатоков. Флешка показывает часть инфы на нем(тексты),остальное(аудиофайлы) "спрятались". То,что спряталось и нужно...

У меня есть таблица из двух строк, как сделать так чтобы нажав на строку и именно под ней добавлялась ноавая - HTML, CSS
у меня есть таблица из двух строк, как сделать так чтобы нажав на строку и именно под ней добавлялась новая строка

Нужна ли консоль, если есть Workbench? - MySQL
Если можно создавать БД и делать связи таблиц в Workbench, то появляется вопрос: зачем нам консоль MySQL если все можно сделать без...

7
Evg
Эксперт CАвтор FAQ
17947 / 6178 / 412
Регистрация: 30.03.2009
Сообщений: 16,970
Записей в блоге: 27
16.08.2014, 17:12 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Виртуально cout, cin и прочее является файлом и оно так живёт для всей программной части вплоть до обращения к операционной системе. А внутри операционной системы уже идёт разбор, чем конкретно является дескриптор файла: устройством ввода-вывода, каналом, сокетом, файлом и т.п.

Сделано это так, чтобы на программном уровне как можно дальше абстрагировать пользователя от работы с устройством
1
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
16.08.2014, 17:39  [ТС] #3
Evg, но разве поток это не класс?
Или класс каким-то образом переходит в файл при обращении к нему?
0
Evg
Эксперт CАвтор FAQ
17947 / 6178 / 412
Регистрация: 30.03.2009
Сообщений: 16,970
Записей в блоге: 27
16.08.2014, 18:12 #4
Поток (мы говорим о "stream", а не о "thread") - это примитив операционной системы. Над ним надстраивают программные обёртки под названием "поток". Примитив операционной системы делают так, чтобы минимизировать взаимодействие программы с операционной системой. Условно говоря, операционная система предоставляет интерфейс "записать в дескриптор файла номер такой-то кусок данных лежащих по такому-то адресу такого-то размера" и всё. А дальше поверх этого строят более удобные для программирования интерфейсы типа printf ли cout, которые оперируют более удобными понятиями типа "целое число", "плавающее число", "строка и т.п.". Но внутри себя в момент печати эти интерфейсы в конечном итоге заполняют строковой буфер данными, которые нужно напечатать, и отдают этот буффер операционной системе. При этом даже не зная, с чем вообще идёт работа - с терминалом, с файлом, с сокетом и т.п.

Добавлено через 2 минуты
Вообще операционная система предоставляет интерфейс для пользовательских программ - API. В случае линукса это набор системных вызовов, в случае windows - это WinApi. Ничего за пределами этого API операционную систему не интересует. Операционной системе вообще пофиг, на каком языке написана твоя программа, она об этом даже и не знает
1
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
16.08.2014, 18:16  [ТС] #5
Evg, Просто в книжке от Герберта Шилдта написано, что классы basic_istream, basic_ostream, basic_iostream используются для создания потоков, обеспечивающий собственно ввод и вывод данных.
То есть если потоки уже определены, как примитив в операционной системе, то как классы систем ввода-вывода используются для создания этих потоков?
0
Gwini
10 / 10 / 3
Регистрация: 08.03.2014
Сообщений: 70
16.08.2014, 18:28 #6
Цитата Сообщение от Unifan Посмотреть сообщение
то как классы систем ввода-вывода используются для создания этих потоков?
для управления ими в виде методов типа width, right, left, hex, oct, dec и тд. И в случае файлов — ручного открытия/закрытия с помощью open и close.
0
Evg
Эксперт CАвтор FAQ
17947 / 6178 / 412
Регистрация: 30.03.2009
Сообщений: 16,970
Записей в блоге: 27
16.08.2014, 18:55 #7
Цитата Сообщение от Unifan Посмотреть сообщение
то как классы систем ввода-вывода используются для создания этих потоков?
Реализация классов внутри себя в конечном итоге используют API операционной системы

Добавлено через 8 минут
Вот тебе пример упрощённой реализации printf'а. То, что есть write_string - считай, что это и есть интерфейс операционной системы, который печатает из строкового буфера в файловый дескриптор. А вся остальная программная шелуха - это надстройка над этим интерфейсом, у которой есть только одно назначение - сделать удобной процесс печати данных. Всякие cout и прочее реализованы по такому же принципу. При этом операционная система знает только то, что программа попросила её выдать в файловый дескриптор кусок памяти. Откуда вообще возник такой запрос (из printf'а, из cout'а или из напрямую вызыванного write'а), операционная система не знает

Как перенести параметры из ф-ции printf() в самодельную
1
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
16.08.2014, 18:57  [ТС] #8
Evg, Кажется усвоил, спасибо вам
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2014, 18:57
Привет! Вот еще темы с ответами:

Выяснить, является ли последовательность возрастающей, есть ли в ней одинаковые соседние числа - Pascal
Вводится последовательность целых ненулевых чисел, признак окончания ввода — ввод 0. Количество чисел не меньше 2. Выяснить: -​...

Каким образом выводят информацию о новой версии приложения - Программирование Android
Вот стоит у меня какая то программа. Приходит уведомление о наличии обновления. Я обновляюсь. Открываю программу и выскакивает окно с...

Подскажите, как реализовать проверку того, что пользователь с консоли вводит ИМЕННО предложение, то есть, если - C#
Подскажите, как реализовать проверку того, что пользователь с консоли вводит ИМЕННО предложение, то есть, если он будет вводить...

Файл не является файлом базы данных 1с - 1С
Всем привет, уважаемые форумчане! Столкнулся с такой проблемой: предположительно из-за коварных действий уволившегося недовольного...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
16.08.2014, 18:57
Ответ Создать тему
Опции темы

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