Windows和Linux中的printf之间的区别

其实除了核心C语言外,还有一个C语言库。 如果我的理解是正确的,像printf这样的printf是C库的一部分。 现在我已经在Windows C下用Turbo C编写了程序,并且在Linux中使用了gcc。

我的问题是:在Windows和Linux中, printfprintf的代码实现是否相同? 最终, printf函数必须调用核心操作系统中的一个函数(在这两种情况下)才能在屏幕上显示ASCII字符? 所以既然这两个操作系统是不同的,这两种情况下printf的代码执行情况是不同的呢?

当然,执行( printf<stdio.h>所有函数)是不同的(在Linux和Windows上),但是行为应该符合C11或C99标准中的规范。

请注意, printf不会在屏幕上显示字符,而是将它们发送到标准输出(请参阅printf(3) )。 别的东西 – 比如内核tty层和Linux上的终端模拟器 -正在屏幕上(或其他地方)显示字符。

在Linux和POSIX系统上, <stdio.h>最终使用系统调用将数据写入文件描述符 。 这将是write(2) (用于printf ),系统调用列表在系统调用(2)中可用。 请注意stdout通常被缓冲(特别是出于性能方面的原因;为每个写入的字节做一个write系统调用会花费太多)。 见fflush(3) & setvbuf(3) 。 尝试在你的Linux程序中使用strace(1)来理解实际使用的系统调用。

在Windows上,有一些等价的东西(除了Windows上的系统调用列表没有文档记载,而且是非常不同的)。

顺便说一句,GNU / Linux大多是免费软件 。 因此,请阅读高级Linux编程,然后研究源代码: libc通常是glibc (但也可能是musl-libc等等…所以你可以在Linux上有几个 printf实现,但是通常你有一个 libc.so ,即使你可以有几个),内核源代码可以在kernel.org上找到 。