我正在学习Windows,Linux操作系统(Ubuntu)。根据我的教科书( OS概念第10版),从操作系统的角度来看,API是一组可以与内核交互的函数(如系统调用).所以我的问题是..。
发布于 2021-02-18 12:53:23
您需要知道C语言只是一种约定。当像您这样的开发人员或任何人实现编译器时,他们都会为特定的操作系统编写编译器。这意味着stdio.h基本上是一组将专门为操作系统编译的函数,它只在该操作系统上工作,除非另一个操作系统以相同的方式(使用相同的系统调用)实现相同的功能。基本上,所有需要系统调用的东西都是特定于一个操作系统的,其他的东西都是跨平台的,因为它只依赖底层处理器。
操作系统本身可以描述为一个程序,它是用C/C++编写的,但依赖于操作系统将在其上运行的处理器。在编写操作系统时,不能使用通常需要系统调用的任何函数,因为实现系统调用是由您自己决定的。它的意思是留给您的基本语言,如指针,函数,结构等。
我不会将stdio.h称为API,因为API更像可以从C/C++等语言直接调用内核的函数。例如,在Windows上,您可以使用CreateWindowExW()函数从C++创建窗口。这个函数对API的定义有更好的响应,而printf()实际上不是一个API,但更像是一个高级函数,它被编译成一个API调用。
最后,您使用的编译器将像.cpp或.c这样的文本文件编译成某种常规格式的可执行文件。在引导计算机时(如果您正在编写操作系统),应该由您来解释这种常规格式。例如,Linux内核被编译成一个.elf文件,这是一种传统的文件格式。然后,像GRUB这样的引导代码将解释该文件格式,从而能够跳转到内核的入口点。Linux内核是一个静态链接的C程序,它只使用基本的C语言,如指针等。
希望这能回答你的问题。
https://stackoverflow.com/questions/66255629
复制相似问题