Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1749353
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: LINUX

2019-05-14 18:30:12

原文地址:

    我们在写C程序时经常遇到printf(),fprintf(),perror(),其实和上述三个函数对应的就是stdin,stdout,stderr。
说到这不得不提及stdin,stdout,stderr。想想,我们在用C去写文件时的操作,File *fp=fopen(),这个fp就是我们向系统申请的,相当于一通往文件的通道。其实,stdin,stdout,stderr就是这个fp,不过他是随着计算机系统的开启默认打开的。
0就是stdin,表示输入流,指从键盘输入
1代表stdout,2代表stderr,1,2默认是显示器。
    printf()其实就是向stdout中输出,等同于fprintf(stdout,"Hello World!!\n")
    perror()其实就是向stderr中输出,perror(" Hello World!!\n"),相当于fprintf(stderr,"Hello World!!\n")

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int fprintf( FILE *stream, const char *format, ... ); //stream可以是stdout、stderr、或者自定义的stream

另外,常用用法:

点击(此处)折叠或打开

  1. perror("fopen()");
  2. fprintf(stderr, "fopen():%s\n", strerror(errno));//二者的输出结果是一样的,但是strerror()有一个问题,就是strerror()返回的字符串存储在一个公共的区域,也就是,说如果其他线程也调用了这个函数,而且传入了一个不同的errno值,那么这个字符串会被覆盖掉。
  3. //fprintf(stderr, "fopen() failed . errno = %d : %s\n", errno, strerror(errno));

阅读(4999) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~