printf()刷新缓冲区

看到一个关于fork()的题目(来源于:https://mp.weixin.qq.com/s/MsGeaWNmSVOCT7kXFrQm_g),如下:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
   int i;
   for(i=0; i<2; i++){
      fork();
      printf("-");
   }

   wait(NULL);
   wait(NULL);

   return 0;
}

结果是输出8个‘-‘,解释的原因是printf()缓冲区没有立即刷新。

查询资料后,得知缓冲区刷新方式除了缓冲区满了和‘\n‘进入缓冲区以外,以下方式也会刷新:

1.程序结束时会刷新,上题就是会在程序结束时刷新。

2.调用fflush(stdout)。

3.scanf()要在缓冲区读取数据时先刷新缓冲区(避免读取了缓冲区内要输出的数据)。

原文地址:https://www.cnblogs.com/qiu00/p/12430086.html

时间: 2024-10-18 20:13:07

printf()刷新缓冲区的相关文章

JavaSE8基础 OutputStreamWriter flush 写入字符后要刷新缓冲区

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) information: 工作空间的初始状态 code: package jizuiku0; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; /* * @version V17.09 */

c++中cout&lt;&lt;未刷新缓冲区及未遇endl便输出的问题

今天在mac的xcode上直接写cout<<未遇到enl以及未刷新缓冲区数据就不能输出. 记得以前在vs以及g++上都会直接输出,之后查阅的c++输入输出缓冲区刷新的问题,解决了这个矛盾. 缓冲区清空的情况: 1.程序正常结束.作为main返回工作的一部分,将清空所有的输出缓冲区. 2.在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新. 3.用操纵符显示地刷新缓冲区,如用endl. 4.在每次输出操作执行完毕后,用unitbuf操纵符设置流的内部状态,从而清

10 python从键盘获取输入、刷新缓冲区

1 ---python从键盘获取输入有两种方法: 2 3 4 input与raw_input比较: 5 6 #1.input函数:需要以合法的python表达式形式输入 7 8 例1: 9 >>> name = input ("what is your name ?") 10 what is your name ? 11 12 当输入为数值型:3时,通过:当输入为字符型:lucy时,抱错: 13 14 例2: 15 str = input("Enter yo

第一次遇到刷新缓冲区延时

[背景] 之前一直只是知道像 print 这样输出函数,存在一种可能,就是要打印的值还停留在缓冲区并没有被刷新到 std.out,这样我们在命令行中 中看不到它的输出.   之前从来没有遇到过,而且还是可以稳定复现的那种. [看一下缓冲区刷新不及时的情况] import asyncio import sys async def main(): print("hello ",end=' ') await asyncio.sleep(1) print("world")

C语言刷新缓冲区(转载)

C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 char *fgets(char * restrict s, int n, FILE * restrict stream); char *gets(char *s);//可能导致溢出,用fgets代替之. //格式化输入系列 int fscanf(FILE * restrict stream, co

c刷新缓冲区

int c; while((c = getchar()) != '\n' && c != EOF);

PHP IIS 环境 ob_flush()刷新缓冲区执行完才显示 解决办法,iis缓冲区原因

找到C:\Windows\System32\inetsrv\config\applicationHost.config 文件: 找到这段代码 <handlers accessPolicy="Read, Script"> 找到<add name="PHP" path="*.php" ................................... 在结束标签前添加代码 responseBufferLimit="0&

C++输入输出缓冲区的刷新问题

当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起.这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介.例如,对于一个输出流, 每次成员函数put  (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中. 当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话).这个过程

c语言坑之printf缓冲区

1 #include <stdio.h> 2 #include <pthread.h> 3 #include <semaphore.h> 4 #include <unistd.h> 5 #define MAXSTACK 100 6 int stack[MAXSTACK][2]; 7 int size = 0; 8 sem_t sem; 9 /* 从文件1.dat读取数据,每读一次,信号量加一*/ 10 void* ReadData1(void*) 11 {