Одно использование внутреннего ключевого слова должно ограничить доступ к конкретным реализациям от пользователя Вашего блока.
, Если у Вас есть фабрика или некоторое другое центральное расположение для построения объектов, пользователю Вашего блока нужно только соглашение с открытым интерфейсом или абстрактным базовым классом.
кроме того, внутренние конструкторы позволяют Вам управлять, где и когда в других отношениях общедоступный класс инстанцируют.
scanf () и printf () - это функции в libc (стандартная библиотека C), и они вызывают системные вызовы операционной системы read () и write () соответственно, обращаясь к файловым дескрипторам stdin и stdout соответственно (fscanf и fprintf позволяют указать файловый поток, из которого вы хотите читать / записывать).
Вызовы read () и write () (и все системные вызовы) приводят к «переключению контекста» из вашего приложение на уровне пользователя в режим ядра, что означает, что оно может выполнять привилегированные операции, такие как прямой обмен данными с оборудованием. В зависимости от того, как вы запустили приложение, дескрипторы файлов 'stdin' и 'stdout', вероятно, привязаны к консольному устройству (например, tty0) или какому-либо устройству виртуальной консоли (например, предоставляемому xterm). read () и write () безопасно копируют данные в / из буфера ядра, называемого '
Я думаю, что ОС просто предоставляет два потока, один для ввода, а другой для вывода, потоки абстрагируются от того, как представляются выходные данные или откуда поступают входные данные.
поэтому scanf и printf просто добавляют байты (или потребляют байты) из любого потока.
В моей ОС я работаю с scanf, а printf основан на функциях getch () и ant putch ().