printf, scnaf, (stdio.h中的I/O函数)可以称为API吗?



我正在学习Windows操作系统,Linux(Ubuntu)。根据我的课本(操作系统概念第10版),从操作系统的角度来看,API是一组与内核交互的函数(如系统调用)…所以我的问题是……

  1. stdio.h可以被称为API吗??
  2. 像stdio.h这样的
  3. 库可以跨平台(Ubuntu, Windows . .)。有通用的API吗Stdio.h,可以跨平台使用??

您需要知道C语言只是一种约定。当像您这样的开发人员或任何人实现编译器时,他们会为特定的操作系统编写该编译器。这意味着stdio.h基本上是一组将专门为操作系统编译的函数,并且它只在该操作系统上工作,除非另一个操作系统以相同的方式实现相同的函数(使用相同的系统调用)。基本上,所有需要系统调用的东西都是特定于一个操作系统的,其他的东西都将是跨平台的,因为它只依赖于底层处理器。

就其本身而言,操作系统可以被描述为一个用C/c++编写但依赖于操作系统运行的处理器的程序。当您编写操作系统时,您不能使用通常需要系统调用的任何函数,因为实现系统调用取决于您。这意味着你只剩下基本的语言,如指针、函数、结构体等。

我不会将stdio.h称为API,因为API更像是可以从C/c++等语言调用的函数,这些函数将直接在内核中调用。例如,在Windows上,您可以从c++中使用CreateWindowExW()函数来创建窗口。这个函数更好地响应API的定义,而printf()并不是一个真正的API,而更像是一个被编译为API调用的高级函数。

最后,您使用的编译器将以某种常规格式将文本文件(如.cpp或.c)编译为可执行文件。当您引导计算机(如果您正在编写操作系统)时,由您来解释传统格式。例如,Linux内核被编译成一个.elf文件,这是一种常规的文件格式。然后,像GRUB这样的引导代码将解释该文件格式,以便能够跳转到内核的入口点。Linux内核是一个静态链接的C程序,它只使用基本的C语言,如指针等。

希望这能回答你的问题。

最新更新