Windows和Linux中printf的区别

时间:2014-11-22 07:03:49

标签: c linux windows printf

实际上除了核心C语言之外,还有一个C库。如果我的理解是正确的,那么像printf这样的函数就是C库的一部分。现在我在Windows中使用Turbo C中的C编程以及在Linux中使用gcc。

我的问题是:在Windows和Linux中,printf等函数的代码实现是否相同?最终printf函数必须调用核心操作系统中的一个函数(在两种情况下)都会在屏幕上显示ASCII字符?因此,由于两个操作系统都不同,printf的代码实现在这两种情况下是否也会有所不同?

1 个答案:

答案 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上找到