Я много искал об этом: как заставить C печатать все каталоги без dirent.h. Я нашел что-то под названием Tiny Dirent или что-то в этом роде, но это было не очень полезно для меня, потому что на него была лицензия. Я обнаружил еще несколько бесполезных вещей. Теперь я хочу сделать это сам, потому что я узнал, что единственный способ - написать его самому. Я использую GCC для компиляции и использую Linux для его создания. Итак, как я могу создать свой собственный dirent.h без включения каких-либо заголовочных файлов?
Это зависит от операционной системы, поскольку не все реализации C (вспомните какую-нибудь программу C для Arduino) имеют каталоги.
Как я могу перечислить каталоги, не включая файлы, включая dirent.h?
С помощью некоторых других библиотек или непосредственно системных вызовов (2) .
Вы рассматривали возможность использования ntfw(3) или readdir(3) ?
Итак, как я могу создать свой собственный dirent.h без включения каких-либо заголовочных файлов?
Вы создаете исходные файлы C с помощью хорошего редактора, такого как GNU emacs . Или вы используете (или пишете) программу, генерирующую некоторый код C (например, GNU bison).
Вам следует прочитать хороший учебник по операционной системе , если вы хотите создать свою собственную ОС. Тогда смотрите также OSDEV и запланируйте несколько лет работы на полную ставку. Смотрите также LinuxFromScratch и изучайте для вдохновения исходный код ядра Linux или FreeBSD.
Я использую GCC для компиляции
Обязательно ознакомьтесь с документацией GCC (пользователя и внутренностей ). Используйте его как gcc -Wall -Wextra -g
. Вы можете написать свой плагин GCC или сгенерировать некоторый код C, например. ГПП
На самом деле, то, что я хотел сделать, это подготовка к созданию операционной системы, которая не основана на Linux. Но, насколько я знаю, я не могу использовать системные вызовы, которые являются функцией Linux во время разработки.
Вы можете создать свою ОС с нуля. Для этого вам понадобится много лет. Удачи
Что касается «Я не могу использовать системные вызовы», вы не можете читать каталоги (или иным образом получать доступ к оборудованию) без системного вызова в Windows, Linux или Mac.
Напр. Linux структура struct dirent
, возвращаемая readdir, имеет элемент d_type
, тип которого вы можете проверить.
Если вы пишете свою собственную POSIX-подобную операционную систему, вы можете сами решить, какие элементы содержит структура DT_DIR
, например, упомянутый выше элемент dirent
.
У вас не будет d_type
/opendir
/readdir
в вашем ядре, но вам придется реализовать такую функциональность самостоятельно.
Какая у вас операционная система? Если вы хотите закодировать свою собственную операционную систему, это должно быть явно указано в вашем вопросе (что неясно)