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

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

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

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

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

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

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

Скрыть информацию, которая выводится в консоль C++
C++ Обработка символьных данных. Yes, если есть символ в строке и NO если его нет
C++ Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени
C++ Если число является простым, то функция возвращает true, если не является false
C++ Как сделать чтобы перебор символов шел до конца строки? Если у меня например в ней есть пробелы?
C++ Почему если во вторую и третью строку, вводить сперва символы а потом числа. То atoi, atof выводят "0"
C++ Как нарисовать гладкую кривую, если есть массив точек, лежащих на ней?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17387 / 5625 / 351
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
16.08.2014, 17:12     Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Виртуально cout, cin и прочее является файлом и оно так живёт для всей программной части вплоть до обращения к операционной системе. А внутри операционной системы уже идёт разбор, чем конкретно является дескриптор файла: устройством ввода-вывода, каналом, сокетом, файлом и т.п.

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

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

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

Как перенести параметры из ф-ции printf() в самодельную
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2014, 18:57     Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней?
Еще ссылки по теме:

C++ Выдать информацию о животном из списка, заданного файлом
Запись структуры (в ней есть поля типа данных char*) в бинарный файл C++
Два потока выводят информацию в консоль C++
Определить, является ли значение целочисленной переменной х четным. Если является, то вывести на печать значен C++
Не выводит информацию в консоль C++

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

Или воспользуйтесь поиском по форуму:
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
16.08.2014, 18:57  [ТС]     Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней? #8
Evg, Кажется усвоил, спасибо вам
Yandex
Объявления
16.08.2014, 18:57     Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней?
Ответ Создать тему
Опции темы

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