首页 > 系统相关 >Linux下printf函数的输出问题

Linux下printf函数的输出问题

时间:2025-01-23 12:03:46浏览次数:3  
标签:输出 函数 刷新 printf Linux 缓冲区 屏幕 hello

Linux下printf函数的输出问题

        向屏幕输出,C语言中可以使用printf函数,实际上,printf不是直接把数据输出到屏幕上的,首先把输出的内容写到缓冲区中,当缓冲区放满以后,它会把缓冲区的内容输出到屏幕上。
        为什么这样做呢?
        有一个效率的问题,因为要把printf输出的内容打印到屏幕上,首先要调用系统的接口来完成,屏幕是硬件设备,是由操作系统来管理的,因此printf在输出的时候要通过调用操作系统的接口才能完成,要从用户态切到内核态,开销是很大的,我们执行printf的时候,我们在库函数中就设置了缓冲区。
        比如说,我们现在要在屏幕上输出hello,abc,123
        我们可以先将它们统一放在缓冲区中,缓冲区放满以后,一次性打印到屏幕上,这样从用户态切换到内核态就1次就可以了。
        所以printf就准备一个缓冲区,表面上看是把hello打印到屏幕上了,实际上是放到缓冲区,缓冲区放满了输出的到屏幕上。

        printf 函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有以下三种情况中的一种情况满足,才会输出到屏幕。
1 缓冲区满
2 强制刷新缓冲区 fflush 或者加上 \n
3 程序结束时

 

运行后 是屏幕上先空格闪5秒后才出现hello

进程是先刷新缓冲区才退出的
exit(0)调用后,刷新缓冲区,然后会调用_exit(0),这个才是真正退出进程的方法
所以,如果代码上写的是_exit(0),则没有刷新缓冲区就退出进程了。

 给printf句末加上\n后

运行后,屏幕上先出现hello 再出现空格5秒

以下是另一种实现方式,

用fflush强制刷新缓冲区

运行后如下 屏幕上先出现hello 再出现空格5秒

 

标签:输出,函数,刷新,printf,Linux,缓冲区,屏幕,hello
From: https://blog.csdn.net/2301_78353179/article/details/145299896

相关文章

  • 【Linux日志】syslog协议的Linux系统日志服务程序使用
    一、什么是syslog协议syslog协议为网络设备间传输日志信息提供了标准化解决方案。借助该协议,服务器、路由器、防火墙等各类设备能够将日志消息发送至中央日志服务器,实现日志的集中管理与分析。下面为您详细介绍syslog协议的关键概念和组成部分:1.协议版本RFC3164:早期的s......
  • 腾讯云Linux安装 Ubuntu Desktop GUI图形化桌面
    我的系统版本是ubuntu20.04运行以下命令,更新软件源。sudoapt-getupdate运行以下命令,安装图形化桌面。sudoapt-getinstallubuntu-desktop运行以下命令,设置默认启动为图形化桌面。您可以执行systemctlset-defaultmulti-user.target,即可取消图形化界面登录。sudosystemctls......
  • linux mint 22安装新的dock停靠栏
    一,PLANK,安装成功,但是运行后和系统有冲突,无法使用。二,LATTE-DOCK,安装不成功,始终提示缺少依赖文件。三,CAIRO-DOCK,安装成功,安装新的主题后正常使用。下面附安装方法:sudoaptinstallcairo-dock四,安装主题的方法:要下载和安装Cairo-Dock的主题包,可以按照以下步骤操作:1.......
  • Linux下卸载Oracle 11g
    第一种方法:使用oracle自带的runInstaller卸载123[oracle@VM_0_14_centosdeinstall]$cd$ORACLE_HOME[oracle@VM_0_14_centos 11.2.0]$cddeinstall/[oracle@VM_0_14_centosdeinstall]$./deinstall第二种方法:通过删除文件的方式卸载;(即:删除Oracl......
  • 回调函数 事件处理 dotnet .net 有界队列 背压机制(Backpressure)有界队列
    回调函数事件处理dotnet.net有界队列背压机制(Backpressure)有界队列通过有界队列来实现背压,确保生产者不会以超过消费者处理能力的速度发送数据。usingSystem.Threading.Channels;publicclassProgram{staticasyncTaskMain(string[]args){//创......
  • 回调函数 事件处理 dotnet .net 消费处理系统 生产者-消费者类型
    回调函数dotnet.net消费处理系统生产者-消费者类型一个简单的消息处理系统,它使用了.NET的System.Threading.Channels命名空间来创建一个无界的通道(channel),用于在不同的任务之间传递MessageWrapper对象。无界限的消息队列(UnboundedChannel)是.NET中System.Threading.Channel......
  • go语言中的ew函数介绍
    在Go语言中,new是一个内建函数,用于分配内存并返回一个指向新分配的零值的指针。其主要作用是创建一个类型为T的新变量,并初始化为该类型的零值,返回指向这个变量的指针。它的语法和基本使用方法如下:new函数的基本语法new(T)T是你想要创建的新变量的类型。new(T)返回的......
  • linux文本内容和文件操作常用命令
     写在前面:正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。(操作字符串的)通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。(操作文......
  • MySQL存储过程和函数
    存储过程和函数函数与存储过程最大的区别就是函数调用有返回值,调用存储过程用call语句,而调用函数就直接引用函数名+参数即可创建存储过程和函数详解1234567891011121314151617181920212223242526272829303132333435363738394041......
  • python中很常用的10个内置函数整理(初学必备)
    对于初学Python的小伙伴们来说,掌握内置常用函数是学好Python的重要一步。这些函数不仅能让你的代码更加简洁,还可以提高编程效率。本笔记将为大家整理62个Python中最常用的内置函数,并且给出了一些简单的示例,帮助大家更好地理解和运用这些函数。这些内置函数是Pyth......