实际上除了核心C语言之外,还有一个C库。如果我的理解是正确的,那么像printf
这样的函数就是C库的一部分。现在我在Windows中使用Turbo C中的C编程以及在Linux中使用gcc。
我的问题是:在Windows和Linux中,printf
等函数的代码实现是否相同?最终printf
函数必须调用核心操作系统中的一个函数(在两种情况下)都会在屏幕上显示ASCII字符?因此,由于两个操作系统都不同,printf
的代码实现在这两种情况下是否也会有所不同?
答案 0 :(得分:5)
当然(printf
的实现和<stdio.h>
中的所有函数)的实现是不同的(在Linux和Windows上),但行为应该符合C11中的规范或C99标准。
请注意,printf
不会在屏幕上显示字符,而是将它们发送到标准输出(请参阅printf(3))。别的东西 - 例如内核tty层和Linux上的terminal emulator - 正在屏幕上显示字符(或其他地方!)。
在Linux和POSIX系统上,<stdio.h>
最终使用system calls将数据写入file descriptor。它将是write(2)(对于printf
),并且syscalls(2)中提供了系统调用列表。请注意stdout
通常是缓冲的(特别是出于性能原因;对每个写入的字节进行write
系统调用会太昂贵)。见fflush(3)&amp; setvbuf(3)。尝试在Linux程序中使用strace(1)来了解实际使用的系统调用。
在Windows上,有一些相同的东西(除了Windows上的系统调用列表记录较少且非常不同)。
BTW,GNU / Linux主要是free software。请阅读Advanced Linux Programming然后研究源代码:libc通常是glibc(但可能是musl-libc等等......所以你可以拥有几个 Linux上printf
的实现,但通常你有一个 libc.so
,即使你可以有几个),内核源代码可以在kernel.org上找到