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

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

Восстановить пароль Регистрация
 
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
16.08.2014, 16:57     Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней? #1
Система ввода-вывода С++ основана на работе с потоками. Потоки в свою очередь являются абстрактными объектами с логическим интерфейсом и файлом, где файл - это любой носитель данных. Стандартные потоки (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++ While4°. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести true, если не является — вывести false.
Дано целое число N(>0). Если оно является степенью числа 3, то вывести TRUE, если не является-вывести FALSE. C++
Дано целое число. Если оно является нечетным положительным, то прибавить к нему 1, если отрицательным, то вычесть 2, если нулевым, то заменить на 10 C++
Скрыть информацию, которая выводится в консоль C++
C++ Обработка символьных данных. Yes, если есть символ в строке и NO если его нет
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
16.08.2014, 17:12     Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Виртуально cout, cin и прочее является файлом и оно так живёт для всей программной части вплоть до обращения к операционной системе. А внутри операционной системы уже идёт разбор, чем конкретно является дескриптор файла: устройством ввода-вывода, каналом, сокетом, файлом и т.п.

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

Добавлено через 2 минуты
Вообще операционная система предоставляет интерфейс для пользовательских программ - API. В случае линукса это набор системных вызовов, в случае windows - это WinApi. Ничего за пределами этого API операционную систему не интересует. Операционной системе вообще пофиг, на каком языке написана твоя программа, она об этом даже и не знает
Unifan
 Аватар для 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
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 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++ Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени
C++ Если число является простым, то функция возвращает true, если не является false
C++ Как сделать чтобы перебор символов шел до конца строки? Если у меня например в ней есть пробелы?

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

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

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