我对编写操作系统很感兴趣已经有一段时间了。在深入研究几个不同的站点时,我发现了一个有趣的概念(转述一下):如果您使用#include开始编写引导加载程序,那么您已经犯了一个致命的错误。
我已经经历了K&R,整本书在每一课中都包含了它。在学习C语言的过程中,我一直在使用它,我不知道我学到了什么可以使用stdio,哪些不可以。没有stdio,你在C中能做什么?
发布于 2011-06-30 15:08:28
C标准(ISO/IEC 9899:1999)认可两种类型的实现(§4一致性,²6):
它们为语言提供了基本的功能,并且没有声明任何函数( <stdarg.h>中的功能在标准中被显式定义为宏)。请注意,它不包括复杂的numbers.
独立实现的全部要点是允许您编写所需的任何代码,而不受通常的标准库和特定的标准I/O函数的限制。缺点是,您不仅可以而且必须提供这些功能-或者利用实现提供的替代功能。请注意,在独立实现中,程序的入口点不需要称为main。
您正在寻找的是独立的实现--或者使用托管实现的独立部分。您将使用头文件(除非您疯了),但它们可能不是标准的C库头文件,而不是列出用于独立实现的其他文件。
发布于 2011-06-30 14:36:00
stdio代表标准输入/输出。顾名思义,它包含了与标准IO相关的东西。Wikipedia article of stdio.h列出了stdio.h的内容。如果使用它们,您将需要stdio.h。您也可以查看man page of stdio.h以了解更多详细信息。
而对于操作系统部分,编写操作系统远不止是简单的编程,即使它是一个学术编程。在开始之前,你应该学习数据结构,算法,操作系统理论等等。The Design of the UNIX Operating System是一本很好的学习操作系统的书。Nachos是一个学术版的操作系统模拟程序。你也可以检查一下。如果你对操作系统着迷,那么你应该读一读Linus Torvalds Just for Fun的自传。好吧,这不是一本技术书籍,但你会有一种感觉,它意味着编写一个操作系统。
发布于 2011-06-30 14:43:52
任何引导加载器几乎肯定会有#include指令,除非它设计得很差。我不知道你从哪里得到这句话的,但也许你误解了它。引导加载器总是从一段纯汇编代码开始,用于初始的低级处理器初始化和初始化C运行时环境。这段代码根本不可能用C语言编写,但其余的代码可以根据需要在环境(内存等)的限制下变得非常复杂。
stdio只是一组连接到某种设备的文件流,这些设备可以接收输入和输出。您可以实现stdin、stdout、stderr或它们的任何子集。您还可以实现一个可以打开任意文件流的文件系统。在现代操作系统中,这最终连接到某种类型的终端,这通常涉及到相当多的层之间,因为它是显示在您的显示器上的虚拟终端,因此需要图形驱动程序等。在原始的嵌入式系统中,stdio可能连接到串行端口或LED显示器。
stdio使用read()和write()函数实现。如果没有实现这些,你就不能使用printf()、fprintf()、fgets()等stdio函数,这并不意味着你不能写到你的图形显示器、串口或其他任何东西上。这只是意味着您没有标准的工具来执行此操作,需要调用自定义函数。
回答你的问题:没有stdio,你可以用C做任何事情。无论如何,它都是用C编写的,你只是失去了一些在任何C标准库中实现的通用功能。
https://stackoverflow.com/questions/6530808
复制相似问题