首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有stdio,什么是可能的?

没有stdio,什么是可能的?
EN

Stack Overflow用户
提问于 2011-06-30 14:31:20
回答 5查看 5.7K关注 0票数 6

我对编写操作系统很感兴趣已经有一段时间了。在深入研究几个不同的站点时,我发现了一个有趣的概念(转述一下):如果您使用#include开始编写引导加载程序,那么您已经犯了一个致命的错误。

我已经经历了K&R,整本书在每一课中都包含了它。在学习C语言的过程中,我一直在使用它,我不知道我学到了什么可以使用stdio,哪些不可以。没有stdio,你在C中能做什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-30 15:08:28

C标准(ISO/IEC 9899:1999)认可两种类型的实现(§4一致性,²6):

  • 独立-其中实现(编译器和库)仅提供七个头文件:

它们为语言提供了基本的功能,并且没有声明任何函数( <stdarg.h>中的功能在标准中被显式定义为宏)。请注意,它不包括复杂的numbers.

  • Hosted -其中的实现提供了由标准定义的完整的库。

独立实现的全部要点是允许您编写所需的任何代码,而不受通常的标准库和特定的标准I/O函数的限制。缺点是,您不仅可以而且必须提供这些功能-或者利用实现提供的替代功能。请注意,在独立实现中,程序的入口点不需要称为main

您正在寻找的是独立的实现--或者使用托管实现的独立部分。您将使用头文件(除非您疯了),但它们可能不是标准的C库头文件,而不是列出用于独立实现的其他文件。

票数 4
EN

Stack Overflow用户

发布于 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的自传。好吧,这不是一本技术书籍,但你会有一种感觉,它意味着编写一个操作系统。

票数 1
EN

Stack Overflow用户

发布于 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标准库中实现的通用功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6530808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档