fflush(stdout)真的可以清除输出缓存区吗

Python074

fflush(stdout)真的可以清除输出缓存区吗,第1张

清除标准输入(通常是键盘)的缓存

的scanf()函数接收输入数据,一个情况下,输入数据结束后,当(不是scanf函数的末尾,scanf函数只有数据在每个数据字段,之后按Enter键结束)。

①案件的空间,“输入”,“跳格”按钮。

②宽度的情况下结束。

③如非法入境。

键盘缓冲区可能会有残留信息的问题。

的scanf()函数应该只扫描标准输入流,其余的信息是必要的,以解决在scanf中的标准输入

()函数后添加FFLUSH(标准输入)。

平齐(标准输入)刷新标准输入缓冲区,废弃

FFLUSH(标准输出)刷新标准输出缓冲区的东西输入缓冲器,对事物的输出缓冲器输出到标准输出设备上。

stdin, stdout,stderr: standard I/O streams

介绍:

在通常情况下,UNIX每个程序在开始运行的时刻,都会有3个已经打开的stream. 分别用来输入,输出,打印诊断和错误信息。通常他们会被连接到用户终端(tty(4)). 但也可以改变到其它文件或设备。这取决于双亲进程的选择和设置。

这3个symbols都是stdio(3) macro,类型为指向FILE的指针。可以被fprintf() fread()等函数使用。

当一个程序开始启动后,stdin, stdout, and stderr are 0, 1,and 2,其它的文件描述符则排在其后。

stderr是不缓存的,stdout是行间缓存的。请注意:

所以:

for(i = 0i <10i++)

{

fprintf(stdout, "This is stdout[%d]", i)

fprintf(stderr, "This is stderr[%d]", i)

}

会全部显示stderr之后,再显示stdout.

又因为stdout是行内缓存,所以加 \n 后会立刻显示。

在程序中使用stdin,stdout,stderr,可以先:

extern FILE *stdout

extern FILE *stderr

重定向

在实际应用中,可以分别使用stdout,stderr来输出。

之后再重定向

如:

./example 1 >/dev/null

这样就将 stdout(1) 的输出丢弃。只显示stderr.

./example 2 >/dev/null

这样就将 stderr(2) 的输出丢弃。只显示stdout.

./example >>/dev/null 2>&1

将2(stderr)重定向到1(stdout). 但又将stdout(1) 丢弃。

所以即为丢弃stdout和stderr.

函数名: freopen

功 能: 替换一个流

用 法: FILE *freopen(char *filename, char *type, FILE *stream)

程序例:

#include <stdio.h>

int main(void)

{

/* redirect standard output to a file */

if (freopen("OUTPUT.FIL", "w", stdout)

== NULL)

fprintf(stderr, "error redirectingstdout\n")

/* this output will go to a file */

printf("This will go into a file.")

/* close the standard output stream */

fclose(stdout)

return 0

}

===========================================================

上面不懂, 可以向下看, 没关系. 实践+理论 , 会慢慢在这详解.., 慢慢看.

下面重点:

在这再说一下. 不然很难理解, 我都没想到. 一直困惑不清啊....stdin stdout stderr.

现在懂了.

牢记: 目前主要的缓存特征是:stdin和stdout是行缓存;而stderr是无缓存的。

本文介绍如何将 stdout 时重定向到文件从某个 C 的程序,然后还原原始的 stdout 同一程序的某个更高位置。 C 函数通常用于重定向 stdout 或 stdin 是 freopen()。 要将 stdout 时重定向到文件名为 FILE.TXT 中,使用下面的调用:

freopen( "file.txt", "w", stdout )//把内容写到这个文件"file.txt"

此语句使所有的后续输出,通常定向到转到文件 FILE.TXT stdout,向。

若要返回到显示默认 stdout) 的 stdout,使用下面的调用:

freopen( "CON", "w", stdout )//输出到控制台"CON"

在这两种情况下检查 freopen() 以确保重定向实际发生的返回值。

下面是短程序演示了 stdout 时重定向:

运行代码

// Compile options needed: none

#include <stdio.h>

#include <stdlib.h>void main(void)

{

FILE *stream

//将内容写到file.txt,"W"是写 ("r"是读)

if((stream = freopen("file.txt", "w", stdout)) == NULL)

exit(-1)

printf("this is stdout output\n")

stream = freopen("CON", "w", stdout)stdout 是向程序的末尾的控制台重定向

printf("And now back to the console once again\n")

}

"CON" 是指控制台 就想DOS窗口.

==========================================

运行代码:

#include <stdio.h>

#include <stdlib.h>

void main(void)

{

FILE *stream

char s[102400]=""

if((stream = freopen("file.txt", "r", stdin)) == NULL) //从文件读数据 (放到stdin , 其实stdin 也有自己的缓冲区.就向buf)

exit(-1)

fread(s, 1, 1024, stdin)//所以从标准输入里读出数据. 因为要注意stdin也是有自己的一块缓冲区.

printf("%s\n", s)//在这里打印读出来的数据.

}