Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Windows和Linux中printf的区别_C_Linux_Windows_Printf - Fatal编程技术网

C Windows和Linux中printf的区别

C Windows和Linux中printf的区别,c,linux,windows,printf,C,Linux,Windows,Printf,实际上,除了核心C语言之外,还有一个C库。如果我的理解是正确的,像printf这样的函数是C库的一部分。现在我已经在Windows的Turbo C中用C编程,在Linux中也使用了gcc 我的问题是:像printf这样的函数在Windows和Linux中的代码实现是否相同?最终,printf函数必须调用核心操作系统中的函数(在这两种情况下),该函数将在屏幕上显示ASCII字符?因此,由于两个操作系统都不同,在这两种情况下,printf的代码实现也会不同吗?当然,printf和中的所有函数的实现是

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


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

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

请注意,
printf
不会在屏幕上显示字符,而是将它们发送到标准输出(请参阅)。其他一些东西——例如Linux上的内核层和内核层——正在屏幕上(或其他地方!)显示字符

在Linux和POSIX系统上,
最终用于将数据写入到。它将是(对于
printf
),系统调用列表在中提供。请注意,
stdout
通常是缓冲的(特别是出于性能原因;对每个写入的字节进行
write
syscall代价太高)。见&。尝试在Linux程序上使用,以了解实际使用的系统调用

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


顺便说一句,GNU/Linux主要是。因此,请阅读并研究源代码:内核源代码通常是(但可能是等…因此,您可以在Linux上实现多个
printf
,但通常只有一个
libc。因此,即使可以有多个
),内核源代码也可以在上获得。

当然可以实现(对于
printf
中的所有函数)是不同的(在Linux和Windows上),但其行为应符合或标准中的规范

请注意,
printf
不会在屏幕上显示字符,而是将它们发送到标准输出(请参阅)。其他东西(例如Linux上的内核层和您的系统)正在屏幕(或其他地方)上显示字符

在Linux和POSIX系统上,
最终用于将数据写入。它将是(对于
printf
),系统调用列表在中提供。请注意,
stdout
通常是缓冲的(主要是出于性能原因;为每个写入的字节编写
系统调用成本太高)。请参阅&。尝试在Linux程序上使用,以了解实际使用的系统调用

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


顺便说一句,GNU/Linux主要是。因此,请阅读然后研究源代码:通常是(但可能是,等等……因此,您可以在Linux上有多个
printf
,但通常您有一个
libc。因此
,即使您可以有多个),内核源代码在上提供。

标准C库的某些部分,如
snprintf()
,在实现时对C(C99)更为逼真Linux上比Windows上更标准。对于文本文件,一个区别是Windows上的“\n”被转换为“\r”+“\n”,而Linux上没有向输出中添加“\r”。在显示器上显示文本或输出到文本设备(如老式点阵打印机)时,Linux必须添加“\r”。了解nd标准C库的一部分是基于UNIX的,因为C最初是在UNIX系统上设计的。Windows上的标准C库本质上是一个仿真层。例如,在Linux上,C文件描述符也是Linux文件描述符,因此如果一个进程有多个模块链接到不同的C库,它们可以共享文件描述符脚本。在Windows上,C文件描述符是运行库本地表中的索引;如果一个进程有多个链接到不同C库的模块,则不能在它们之间共享文件描述符。标准C库的某些部分,如
snprintf()
,在实现时更符合C(C99)Linux上比Windows上更标准。对于文本文件,一个区别是Windows上的“\n”被转换为“\r”+“\n”,而Linux上没有向输出中添加“\r”。在显示器上显示文本或输出到文本设备(如老式点阵打印机)时,Linux必须添加“\r”。了解nd标准C库的一部分是基于UNIX的,因为C最初是在UNIX系统上设计的。Windows上的标准C库本质上是一个仿真层。例如,在Linux上,C文件描述符也是Linux文件描述符,因此如果一个进程有多个模块链接到不同的C库,它们可以共享文件描述符脚本。在Windows上,C文件描述符是运行库本地表中的索引;如果一个进程有多个链接到不同C库的模块,则不能在它们之间共享文件描述符。Turbo C比第一个C标准旧,因此不要期望它的行为像其他符合标准的ImplementationSturbo C比第一个C标准,所以不要期望它的行为像其他符合标准的实现