0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
1 | |
Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней?16.08.2014, 16:57. Показов 1119. Ответов 7
Метки нет (Все метки)
Система ввода-вывода С++ основана на работе с потоками. Потоки в свою очередь являются абстрактными объектами с логическим интерфейсом и файлом, где файл - это любой носитель данных. Стандартные потоки (cout, cin, cerr, clog, wcout, wcin, wcerr, wclog) С++ связаны с консолью, т.е. cmd.
Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней?
0
|
16.08.2014, 16:57 | |
Ответы с готовыми решениями:
7
Два потока выводят информацию в консоль Есть ли возможность запускать jar файлы которые выводят лог в консоль, без ввода? Проверить, есть ли угроза королю и если есть, то от кого именно Как определили, что электрон является носителем заряда? |
16.08.2014, 17:12 | 2 |
Сообщение было отмечено Unifan как решение
Решение
Виртуально cout, cin и прочее является файлом и оно так живёт для всей программной части вплоть до обращения к операционной системе. А внутри операционной системы уже идёт разбор, чем конкретно является дескриптор файла: устройством ввода-вывода, каналом, сокетом, файлом и т.п.
Сделано это так, чтобы на программном уровне как можно дальше абстрагировать пользователя от работы с устройством
1
|
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
16.08.2014, 17:39 [ТС] | 3 |
Evg, но разве поток это не класс?
Или класс каким-то образом переходит в файл при обращении к нему?
0
|
16.08.2014, 18:12 | 4 |
Поток (мы говорим о "stream", а не о "thread") - это примитив операционной системы. Над ним надстраивают программные обёртки под названием "поток". Примитив операционной системы делают так, чтобы минимизировать взаимодействие программы с операционной системой. Условно говоря, операционная система предоставляет интерфейс "записать в дескриптор файла номер такой-то кусок данных лежащих по такому-то адресу такого-то размера" и всё. А дальше поверх этого строят более удобные для программирования интерфейсы типа printf ли cout, которые оперируют более удобными понятиями типа "целое число", "плавающее число", "строка и т.п.". Но внутри себя в момент печати эти интерфейсы в конечном итоге заполняют строковой буфер данными, которые нужно напечатать, и отдают этот буффер операционной системе. При этом даже не зная, с чем вообще идёт работа - с терминалом, с файлом, с сокетом и т.п.
Добавлено через 2 минуты Вообще операционная система предоставляет интерфейс для пользовательских программ - API. В случае линукса это набор системных вызовов, в случае windows - это WinApi. Ничего за пределами этого API операционную систему не интересует. Операционной системе вообще пофиг, на каком языке написана твоя программа, она об этом даже и не знает
1
|
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
16.08.2014, 18:16 [ТС] | 5 |
Evg, Просто в книжке от Герберта Шилдта написано, что классы basic_istream, basic_ostream, basic_iostream используются для создания потоков, обеспечивающий собственно ввод и вывод данных.
То есть если потоки уже определены, как примитив в операционной системе, то как классы систем ввода-вывода используются для создания этих потоков?
0
|
11 / 11 / 3
Регистрация: 08.03.2014
Сообщений: 70
|
|
16.08.2014, 18:28 | 6 |
для управления ими в виде методов типа width, right, left, hex, oct, dec и тд. И в случае файлов — ручного открытия/закрытия с помощью open и close.
0
|
16.08.2014, 18:55 | 7 |
Реализация классов внутри себя в конечном итоге используют API операционной системы
Добавлено через 8 минут Вот тебе пример упрощённой реализации printf'а. То, что есть write_string - считай, что это и есть интерфейс операционной системы, который печатает из строкового буфера в файловый дескриптор. А вся остальная программная шелуха - это надстройка над этим интерфейсом, у которой есть только одно назначение - сделать удобной процесс печати данных. Всякие cout и прочее реализованы по такому же принципу. При этом операционная система знает только то, что программа попросила её выдать в файловый дескриптор кусок памяти. Откуда вообще возник такой запрос (из printf'а, из cout'а или из напрямую вызыванного write'а), операционная система не знает Как перенести параметры из ф-ции printf() в самодельную
1
|
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
16.08.2014, 18:57 [ТС] | 8 |
Evg, Кажется усвоил, спасибо вам
0
|
16.08.2014, 18:57 | |
16.08.2014, 18:57 | |
Помогаю со студенческими работами здесь
8
Флешка не показывает всю информацию, которая на ней есть У меня есть таблица из двух строк, как сделать так чтобы нажав на строку и именно под ней добавлялась ноавая Дана строка S. Выяснить есть ли в ней прописные и строчные буквы латинского алфавита. Если есть, то вывести эти буквы Выяснить, является ли последовательность возрастающей, есть ли в ней одинаковые соседние числа Нужна ли консоль, если есть Workbench? Каким образом выводят информацию о новой версии приложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |