http://hi.baidu.com/best_wenhouhou/item/47b458e4d714e8b2c10d75fa
在调用某些库函数出错时,通常需要将错误信息打印出来,有的程序用perror(print error)打印,有的用strerror打印,到底他们之间有什么区别呢?
man手册里面写的很清楚,perror是将errno对应的错误消息的字符 串打印到标准错误输出上,即stderr或2上,若你的程序将标准错误输出重定向到/dev/null,那就看不到了,就不能用perror了。而 strerror的作用只是将errno对应的错误消息字符串返回,要怎样处理完全由你自己决定。
通常我们选择把错误消息保存到日志文件中,即写文件,所 以通常可以用fprintf(fp, "%s", strerror(errno))将错误消息打印到fp指向的文件中。其中perror中errno对应的错误消息集合跟strerror是一样的,也就 是说不会漏掉某些错误。 

#include <stdio.h> // void perror(const char *msg);

#include <string.h> // char *strerror(int errnum);

#include <errno.h> //errno

errno是错误代码,在errno.h头文件中

void perror(const char *s)

perror是错误输出函数,在标准输出设备上输出一个错误信息。

参数s一般是参数错误的函数

例如perror("fun"),其输出为:fun:后面跟着错误信息(加上一个换行符)

char *strerror(int errnum);通过参数errnum(也就是errno),返回错误信息

以下是测试程序:

//程序名:errtest.c,环境为linux

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(int argc,char *argv[]){
FILE *fp;
char *buf;
if((fp=fopen(argv[1],"r"))==NULL)
{
perror("perror");
printf("sterror:%s\n",strerror(errno));
exit(1);
}
perror("perror");
errno=13;
printf("strerror:%s\n",strerror(errno));
fclose(fp);
return 0;
}

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

编译为errtest

如果输入这样的命令格式:./errtest 111.c(其中111.c不存在)

输出为:

perror: No such file or directory
sterror:Illegal seek

就是两个都是输出到屏幕上来了。而且sterror函数通过errno得到错误代码

如果命令格式为:./errtest 111.c > out.c(其中111.c不存在)

把输出重定位到out.c文件中,会发现屏幕输出为:

perror: No such file or directory
就是说函数perror始终输出到标准输出设备上。而printf输出到文件中了

转载于:https://www.cnblogs.com/chenkai1990/archive/2012/10/25/2740387.html

【转载】在使用上perror和strerror应注意的地方相关推荐

  1. linux c 打印错误信息error errno perror和strerror的区别

    1 perror  头文件:stdio.h  void perror(const char *msg);  它是基于errno的当前值,在标准错上产生一条出错信息,然后返回.  它先输出由msg字符串 ...

  2. perror()与strerror()的应用及区别 man手册查询

    perror() 和 strerror() 以一种直观的方式打印出错误信息,对于调试程序和编写优秀的程序非常有用. 下面是perror() 与 strerror() 的使用范例及区别: perror( ...

  3. 转:perror和strerror的区别

    概述: perror和strerror都是C语言提供的库函数,用于获取与erno相关的错误信息,区别不大,用法也简单.最大的区别在于perror向stderr输出结果,而 strerror向stdou ...

  4. 标准C库函数之perror()、strerror(),以及他们之间各种的优缺点(打印错误信息)

    前言 如果,想要深入的学习标准C库中perror.strerror函数,还是需要去自己阅读Linux系统中的帮助文档. 具体输入命令: man 3 perror man 3 strerror 即可查阅 ...

  5. perror和strerror的使用和区别

    (1) perror 头文件:stdio.h void perror(const char *msg); 它是基于errno的当前值,在标准错上产生一条出错信息,然后返回. 它先输出由msg字符串,然 ...

  6. [转载]虚拟主机上安装Mambo核心系统/组件/模块技巧

    [转载]虚拟主机上安装Mambo核心系统/组件/模块技巧 虚拟主机上安装Mambo核心系统/组件/模块技巧 作者: lang3     (http://htmambo.com/) 虚拟主机大都限制了很 ...

  7. linux下perror函数,Linux学习 之 perror函数,strerror函数,errno

    #include // void perror(const char *msg); #include // char *strerror(int errnum); #include //errno e ...

  8. 梦想的地方!地球上最值得去的20个地方【组图】

    如果你是一个热爱大自然的人你肯定会喜欢这个集合.地球上有太多的地方和风景值得我们这辈子至少要去看一次.大多数自然摄影师喜欢没有人出现在他们的照片中,他们想获得纯净.完美的风景,没有人类的影响.这篇文章 ...

  9. phpcms发布新闻到数据库_Phpcms V9网站从本地上传到服务器需要修改的地方小结

    Phpcms V9网站从本地上传到服务器需要修改的地方小结 发布时间:2013-06-22 13:37:28   作者:佚名   我要评论 网站在本地做好后要迁移到服务器上:网站在发展的过程中,很可能 ...

  10. linux下错误的捕获:errno、perror和strerror的使用

    经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因.这个时候使用 ...

最新文章

  1. 高德地图只显示一个省_浅谈当下各种导航软件:高德地图、百度地图、腾讯地图...
  2. Winform中对DevExpress的RadopGroup的Description、Value、Tag、Text的理解与使用
  3. 凤凰涅槃:从 iBatis 到 MyBatis
  4. iOS: How To Make AutoLayout Work On A ScrollView
  5. linux shell 中文件编码查看及转换方法
  6. iOS开发——处理1000张图片的内存优化
  7. opencv 读取CV_16U图像 c++
  8. 主板没有rgb接口怎么接灯_老电脑也玩一下RGB,一次酷冷至尊MB400L智瞳机箱安装体验...
  9. 【Java】Java Long映射到浏览器或者JavaScript后损失精度
  10. pycocotools安装_pycocotools安装问题
  11. 为bootstrap+angularJs打造的表格代码生成器
  12. 代码编辑器横评:为什么 VS Code 能拔得头筹?| 程序员硬核评测
  13. 为什么要使用多层开发?
  14. java线程volatile_多线程与高并发(四)volatile关键字
  15. Spring Cloud Eureka服务注册中心 单节点搭建(学习总结)
  16. 超好用的网站克隆工具,就是玩
  17. ubuntu 解压与压缩 zip 文件
  18. 集成电路设计的一种运作模式(Fabless/Foundry/IDM模式)
  19. 个别网站打不开,但是别人能打开,手机能打开
  20. 轻蜗牛直租平台-业务背景介绍

热门文章

  1. torch.eq(input, other, out=None)
  2. shell脚本如何获取当前时间
  3. 基于Python的《庆余年》评论分析
  4. 2021-08-13 初识servlet
  5. python中pycharm倒计时_pycharm中的快捷键和简单设置
  6. 基于springboot+vue的(高考)志愿录取系统(前后端分离)
  7. count(1),count(*)与count(列名)到底有什么区别?
  8. c语言中ox1小于小于a,丹江口市2018适应性数学试卷和答案
  9. HIVE数据导入MYSQL实现方式
  10. 十九、Math和Random类