我想知道所有这些输出函数,基本上它们是做什么的?因为我已经经历了很多次,所以printf在遇到它时并不总是在屏幕上打印,而且我听说它会放入缓冲区或类似的东西。因此,如果有人可以明确说明实际情况。如果还可以提供有关输入函数的相同信息,那将是很好的。您告诉得越多越有帮助。。谢谢。
印刷品
将格式指向的C字符串写入标准输出(stdout)。如果format包含格式说明符(以%开头的子序列),则格式之后的附加参数将被格式化并插入到结果字符串中,以替换它们各自的说明符。
此处已经很好地说明了printf实际如何工作:
您的软件将调用printf()。
printf()处理您的字符串和args,然后需要执行内核函数,因为在第3环中无法完成对文件的写入。
printf()生成软件中断,将内核函数的编号(在这种情况下为write()函数)放置在寄存器中。
内核处理请求,并写入文件(stdout是文件描述符)。
完成后,内核使用iret指令返回到软件代码。
软件代码继续。
ISO C99第7.19.3 / 3节中的一些有用的行
当流没有缓冲时,字符应尽快从源或目的地出现。否则,字符可能会作为一个块累积并传输到主机环境或从主机环境传输。
当流被完全缓冲时,打算在填充缓冲区时将字符作为块与主机环境进行传输。
当流被行缓冲时,在遇到换行符时,字符打算作为块与主机环境进行传输。
此外,当填充缓冲区,在无缓冲流上请求输入或在需要从主机环境传输字符的行缓冲流上请求输入时,字符打算作为一个块传输到主机环境。 。
对这些特性的支持是实现定义的,并且可能会受到setbuf和setvbuf函数的影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句