本文是上一篇“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++测试代码

  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <errno.h>
  4. #include <string.h>
  5.  
  6. int main () {
  7. extern int errno;
  8. int fd = open("a.txt", O_RDWR);
  9. if (fd == -)
  10. {
  11. perror ("error1"); //perror的使用
  12. printf ("errno2: %d\n", errno); //errno的使用
  13. printf ("error3:%s\n",strerror(errno)); //strerror的使用
  14.  
  15. }
  16.  
  17. return ;
  18.  
  19. }

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

DWORD dw;dw = GetLastError();

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

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

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

  2. linux系统编程之错误处理:perror,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: Can'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()/strerror()函数

    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()

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

随机推荐

  1. redis外网连接的一些坑

    前言 在使用阿里云和腾讯云的redis 可以减少很大的维护量.但是在我们的业务场景中遇到了一个情况,阿里和腾讯的redis均不支持外网访问.因此,正好帮人解决一个问题,就拿出来分享一下. 阿呆的故事 ...

  2. 你不能不知道到的Hook!

    Hook是什么?     hook翻译之后是钩子的意思,hook的用途主要是用来拦截消息的,看到这里大家可能会迷茫,What is a hook?所以这时就不得不普及一下操作系统的原理. 举个例子:假 ...

  3. AngularJS应用的启动和执行过程

    启动(startup): <!doctype html> <html ng-app> <head> <script src="http://code ...

  4. idea中使用maven

    转:https://www.cnblogs.com/kagome2014/p/8431064.html 对于新版的IDEA可以直接打开Maven项目,但是对于旧版的IDEA需要使用Maven命令生成项 ...

  5. 总结PHP删除字符串最后一个字符的三种方法

    一.前言 从数据库中select()读取一对多的信息时,经常需要将取出的数组用某个特定的字符分割,然后拼接成字符串. 常见的语法格式: foreach ($arr as $key => $val ...

  6. mac端抓包工具——Charles使用

    一.简介 Charles(http://www.charlesproxy.com/)是在Mac 下常用的截取网络封包的工具.Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问 ...

  7. C#和C++的Socket通信

    最近在用C#做一个项目的时候,Socket发送消息的时候遇到了服务端需要接收C++结构体的二进制数据流,这个时候就需要用C#仿照C++的结构体做出一个结构来,然后将其转换成二进制流进行发送,之后将响应 ...

  8. [转]超全面的.NET GDI+图形图像编程教程

    本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ GDI+绘图基础 编写图形程序时需要使用GDI(Gr ...

  9. Java中的IO流(三)

    上一篇<Java中的IO流(二)>把学习Java的字符流以及转换流作了一下记录,从本篇开始将把IO流中对文件或文件夹操作的对象File类的学习进行一下记录. 一,File类的构造函数及字段 ...

  10. Oracle作业4-函数

    一.在数据库中的emp和dept表中做如下查询: 1.列出所有分析师(ANALYST)的姓名.编号和部门 SELECT ENAME,EMPNO,E.DEPTNO,DNAME FROM EMP E,DE ...