【转载++】C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义

时间:2022-01-30 12:22:06

本文是上一篇“fopen返回0(空指针NULL)且GetLastError是0”的侧面回应。听赶来多么地正确和不容置疑,返回NULL时调用GetLastError来看看报错啊,但当时却返回了0,大家都觉得系统哪里出了大问题。事实上,正如:http://www.runoob.com/cprogramming/c-function-fopen.html ,又http://www.cplusplus.com/reference/cstdio/fopen/ 中所开示的那样,“如果返回NULL请查看errno值,在大多数情况下errno值也会被置于依赖于系统的错误码之中”。很显然,上文中提及的句柄不足的情形下时GetLastError并没有被赋值。另一方面,调用C的库函数fopen(全小写)之后又调用Windows的API GetLastError(首字母大写)本身就有些突兀。【换句话说】如果调用fopen则后面调用errno,调用GetLastError前请调用Windows API(这里对应的是CreateFile)。

该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。
On most library implementations, the errno variable is also set to a system-specific error code on failure.

如下转载:https://www.cnblogs.com/gjianw217/p/3251928.html

在C语言编译中,经常会出现一些系统的错误,这些错误如果在编译的时候不能很好的“预见”,会使系统“崩溃”,常见的捕获错误函数有:

errno

#include<errno.h>

这个变量是程序默认的参数,并不需要程序员显式定义,但必须声明:extern int errno; 并且需要包含头文件 errno.h

perror()原型:

#include <stdio.h>
void perror(const char *msg);
它是基于errno的当前值,在标准出错上产生一条出错信息,然后返回。它首先输出由msg指向的字符串,然后是一个冒号,一个空格,接着是对应于errno值的出错信息,最后是一个换行符。

strerror()原型:

#include <string.h>
char * strerror(int errnum);
此函数将errnum(它通常就说errno值)映射为一个出错信息字符串,并返回此字符串的指针。

VC6++测试代码

 #include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h> int main () {
extern int errno;
int fd = open("a.txt", O_RDWR);
if (fd == -)
{
perror ("error1"); //perror的使用
printf ("errno2: %d\n", errno); //errno的使用
printf ("error3:%s\n",strerror(errno)); //strerror的使用 } return ; }

在VC中编写应用程序时,经常需要涉及到错误处理问题。许多函数调用只用TRUE和FALSE来表明函数的运行结果。一旦出现错误,MSDN中往往会指出请用GetLastError()函数来获得错误原因。 可问题是,GetLastError()返回的只是一个双字节数值(DWORD)。一般的调用方法为:

DWORD dw;dw = GetLastError();

【转载++】C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义的更多相关文章

  1. C&sol;C&plus;&plus;错误分析errno&comma;perror&comma;strerror和GetLastError&lpar;&rpar;函数返回的错误代码的意义

    在C语言编译中,经常会出现一些系统的错误,这些错误如果在编译的时候不能很好的“预见”,会使系统“崩溃”,常见的捕获错误函数有: errno #include<errno.h> 这个变量是程 ...

  2. linux系统编程之错误处理:perror&comma;strerror和errno

    1,在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述. errno这个全局变量在<errno.h>头文件中声明如下:extern int errno; errno是 ...

  3. perror strerror使用方法

    1. 简介 很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码. errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数.然后 ...

  4. Linux上的errno和strerror

    部分内容参考:https://www.douban.com/note/165931644/ 在Linux的api中: errno 是记录系统的最后一次错误代码.代码是一个int型的值,在errno.h ...

  5. (转载)PHP使用empty检查函数返回结果时报Fatal error&colon; Can&&num;39&semi;t use function return value in write context的问题

    (转载)http://be-evil.org/post-153.html PHP开发时,当你使用empty检查一个函数返回的结果时会报错:Fatal error: Can't use function ...

  6. errno 与 perror&lpar;&rpar;&sol;strerror&lpar;&rpar;函数

    errno是个全局的int型变量,当调用一个系统函数时不管成功不成功都有可能改变errno的值.但只有不成功时errno的值才是有意义的.如果要真的想用errno进行多次打印,刚可以先将其缓存一下.下 ...

  7. (转)linux下错误的捕获:errno和strerror的使用,以及perror和strerror的区别

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

  8. linux下错误的捕获:errno和strerror的使用

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

  9. Linux下错误的捕获:全局变量errno和strerror&lpar;&rpar;

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

随机推荐

  1. 个人博客作业Week1

    个人博客作业Week1 一.问题 通读<构建之法>我有一下几个问题 PM没有参与代码编如何进行管理. 软件工程师的职业资格考试对我们来说很有必要吗. 当我们为用户开发软件时我们需要了解用户 ...

  2. zk源码环境搭建

    zk不是使用maven管理的. 将zk的src下的代码导入eclipse,lib下的jar包导入工程. QuorumPeerMain类的main方法是入口,启动了zk的server,参数是conf文件 ...

  3. &lbrack;ZT&rsqb; 几大酒店集团美国Co-Brand信用卡比较(三)如何选择最适合你的酒店联名信用卡

    原文地址: http://www.3798.com/archives/596.html 接着对我们这种不是某个酒店忠诚客户的用户选择卡片进行分析.首先要强调的是,我们比较的是信用卡项目本身,而不是酒店 ...

  4. struts2视频学习笔记 07-08(为Action的属性注入值,指定需要Struts 2处理的请求后缀,常用常量)

    课时7 为Action的属性注入值(增加灵活性,适用于经常更改的参数) Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入 ...

  5. 企业部署Linux应用将拥有更低的整体拥有成本

    企业部署Linux应用将拥有更低的整体拥有成本     使用Linux能为企业的IT解决方案降低TCO(整体拥有成本Total Cost of The Ownership)吗?在面临这个问题时,很多企 ...

  6. httpclient 人人网

    登录的站点是3g.renren.com 因为是手机人人, 页面比较简单 首先用HttpGet取出"http://3g.renren.com"的html代码, 是用Jsoup解析出登 ...

  7. 零基础编程指南&lpar;By Turtle&rpar;

    [零.基础] 1.看文章:<程序猿搜索的技巧>(未完成) [一.入门] 学习语言:VB 安装:下载VB6即可 教程:<李天生vb从入门到精通>http://www.xin372 ...

  8. HtmlNodeType枚举

    HtmlNodeType是一个枚举,用于说明一个节点的类型. 源代码如下所示: public enum HtmlNodeType { Document = 0, Element = 1, Commen ...

  9. android一些面试题目

    1.ListView怎么提高滑动效率 2.说下你做过项目的包的构架,(联网,解析,activity,database) 重点 3.载入大量图片怎么做(包含小图和查看大图) 怎么降低一次跟server的 ...

  10. 【转】从源码分析Handler的postDelayed为什么可以延时?

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aliankg/article/details/70842494Thread/Hander/Loope ...