Windows和Linux中printf的区别

Akh*_*hil 1 c linux windows printf

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

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

Bas*_*tch 5

当然,实现(printf和所有函数<stdio.h>)是不同的(在Linux和Windows上),但行为应符合C11C99标准中的规范.

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

在Linux和POSIX系统上,<stdio.h>最终使用系统调用将数据写入文件描述符.它将是write(2)(for printf),并且系统调用列表在syscalls(2)中可用.请注意,stdout它通常是缓冲的(特别是出于性能原因; write为每个写入的字节进行系统调用会太昂贵).见fflush(3)setvbuf(3).尝试在Linux程序中使用strace(1)来理解实际使用的系统调用.

在Windows上,有一些相同的东西(除了Windows上的系统调用列表记录较少并且非常不同).

BTW,GNU/Linux主要是免费软件.所以阅读高级Linux编程然后研究源代码:libc通常是glibc(但可能是musl-libc等等......所以你可以在Linux上有几个实现printf,但通常你有一个 libc.so,即使你可以有几个那些内核源代码可以在kernel.org上找到.