Любой загрузчик почти наверняка будет иметь директивы #include, если только он не плохо спроектирован. Я не знаю, откуда вы взяли эту цитату, но, возможно, вы ее неправильно поняли. Загрузчик всегда запускается с фрагментом чистого ассемблерного кода для начальной низкоуровневой инициализации процессора и для инициализации среды выполнения C. Этот код просто невозможно написать на C. Но остальной код может быть настолько сложным, насколько это необходимо, в рамках ограничений среды (память и т.д.).
stdio — это просто набор файловых потоков, подключенных к какому-либо устройству, которое может получать ввод и вывод. Вы можете реализовать stdin, stdout, stderr или любое их подмножество. Вы также можете реализовать файловую систему, для которой вы можете открывать произвольные файловые потоки. В современной ОС это обычно заканчивается подключением к какому-то терминалу, который включает довольно много промежуточных слоев, потому что это виртуальный терминал, который отображается на вашем мониторе и, следовательно, требует графического драйвера и так далее. В примитивной встроенной системе stdio может быть подключен к последовательному порту или светодиодному дисплею.
stdio реализован с помощью функций read()
и write()
. Если они не реализованы, вы просто не сможете использовать функции stdio, такие как printf()
, fprintf()
, fgets()
и т. д. Это не значит, что вы не можете писать на свой графический дисплей, последовательный порт или что-то еще. Это просто означает, что у вас нет стандартного средства для этого, и вам нужно будет вызывать пользовательские функции.
Чтобы ответить на ваш вопрос: вы можете делать что угодно на C без stdio. В любом случае это все написано на C, вы просто теряете некоторые общие функции, реализованные в любой стандартной библиотеке C.
person
djs
schedule
30.06.2011
#include
, что означает, что загрузчик не должен использовать какие-либо функции из стандартной библиотеки C? Вместо этого вы должны катить свои собственные? Я бы сказал, что это верный способ сделать ваш загрузчик глючным. - person Praetorian   schedule 30.06.2011