stdin和stdout⽤法c语⾔,C语⾔中的stdin,stdout,stderr 我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作⽤。说到这不得不提及stdin,stdout,stderr。想想,我们在⽤C去写⽂件时的操作,File *fp=fopen(),这个fp就是我们向系统申请的,相当于⼀通往⽂件的通道。
其实,stdin,stdout,stderr就是这个fp,不过他是随着计算机系统的开启默认打开的,其中0就是stdin,表⽰输⼊流,指从键盘输⼊,1代表stdout,2代表stderr,1,2默认是显⽰器。printf()其实就是向stdout中输出,等同于fprintf(stdout,“****”),perror()其实就是向stderr中输出,相当于fprintf(stderr,“***”),那到底stdout,和stderr有什么区别和作⽤呢?
我们在写程序时⽤printf()是为了我们能监控我们的程序运⾏状况,或者是说debug,如果我们的程序是⼀直运⾏,不停下来,我们不可能时刻盯着屏幕去看程序输出,这时我们就可以⽤⽂件重定向。将输出到⼀⽂件中,我们以后就可以看这⽂件就⾏。举个例⼦,test.c
fprintf作用编译过后,./test,屏幕上是四条输出,如果./test > ,结果是屏幕上输出两条Stderr Hello World!!,Stdout Helo World!!在⽂件中,基于上⾯说的很容易理解现在的结果,于是我们可以随便处理我们想要的输出,例如:
./test 1& 2&,我们将stdout输出到⽂件中,将stderr输出到⽂件中;
./test 1& ,将stdout输出到⽂件 中,stderr输出到屏幕上;
./test 2&,将stderr输出到⽂件中,stdout输出到屏幕上;
./test > 2>&1,这是将stdout和stderr重定向到同⼀⽂件⽂件中。
如果我们不想看到输出内容,既不想在屏幕上看见,也不想重定向到⽂件中,别担⼼,万能的Linux
Note:stderr,和stdout还有重要⼀点区别,stderr是没有缓冲的,它⽴即输出,⽽stdout默认是⾏缓冲,也就是它遇到‘\n’,才向外输出内容,如果你想stdout也实时输出内容,那就在输出语句后加上fflush(stdout),这样就能达到实时输出的效果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。