linux系统编程之错误处理
在linux系统编程中,当系统调用出现错误时,有一个整型变量会被设置,这个整型变量就是errno,这个变量的定义在/usr/include/errno.h文件中
- #ifndef _ERRNO_H
- /* The includer defined __need_Emath if he wants only the definitions
- of EDOM and ERANGE, and not everything else. */
- #ifndef __need_Emath
- # define _ERRNO_H
- # include <features.h>
- #endif
- __BEGIN_DECLS
- /* Get the error number constants from the system-specific file.
- This file will test __need_Emath and _ERRNO_H. */
- #include <bits/errno.h>
- #undef __need_Emath
- #ifdef _ERRNO_H
- /* Declare the `errno' variable, unless it's defined as a macro by
- bits/errno.h. This is the case in GNU, where it is a per-thread
- variable. This redeclaration using the macro still works, but it
- will be a function declaration without a prototype and may trigger
- a -Wstrict-prototypes warning. */
- #ifndef errno
- extern int errno;
- #endif
- #ifdef __USE_GNU
- /* The full and simple forms of the name with which the program was
- invoked. These variables are set up automatically at startup based on
- the value of ARGV[0] (this works only if you use GNU ld). */
- extern char *program_invocation_name, *program_invocation_short_name;
- #endif /* __USE_GNU */
- #endif /* _ERRNO_H */
- __END_DECLS
- #endif /* _ERRNO_H */
- /* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so
- that printing `error_t' values in the debugger shows the names. We
- might need this definition sometimes even if this file was included
- before. */
- #if defined __USE_GNU || defined __need_error_t
- # ifndef __error_t_defined
- typedef int error_t;
- # define __error_t_defined
- # endif
- # undef __need_error_t
- #endif
当系统调用出现无错误时,这个整型变量便会被设置成一个值,每个值有一个特殊的含义,每一值用一个宏来表示,/usr/include/asm-generic/errno.h文件中定义
- #ifndef _ASM_GENERIC_ERRNO_H
- #define _ASM_GENERIC_ERRNO_H
- #include <asm-generic/errno-base.h>
- #define EDEADLK 35 /* Resource deadlock would occur */
- #define ENAMETOOLONG 36 /* File name too long */
- #define ENOLCK 37 /* No record locks available */
- #define ENOSYS 38 /* Function not implemented */
- #define ENOTEMPTY 39 /* Directory not empty */
- #define ELOOP 40 /* Too many symbolic links encountered */
- #define EWOULDBLOCK EAGAIN /* Operation would block */
- #define ENOMSG 42 /* No message of desired type */
- #define EIDRM 43 /* Identifier removed */
- #define ECHRNG 44 /* Channel number out of range */
- #define EL2NSYNC 45 /* Level 2 not synchronized */
- #define EL3HLT 46 /* Level 3 halted */
- #define EL3RST 47 /* Level 3 reset */
- #define ELNRNG 48 /* Link number out of range */
- #define EUNATCH 49 /* Protocol driver not attached */
- #define ENOCSI 50 /* No CSI structure available */
- #define EL2HLT 51 /* Level 2 halted */
- #define EBADE 52 /* Invalid exchange */
- #define EBADR 53 /* Invalid request descriptor */
- #define EXFULL 54 /* Exchange full */
- #define ENOANO 55 /* No anode */
- #define EBADRQC 56 /* Invalid request code */
- #define EBADSLT 57 /* Invalid slot */
- #define EDEADLOCK EDEADLK
- #define EBFONT 59 /* Bad font file format */
- #define ENOSTR 60 /* Device not a stream */
- #define ENODATA 61 /* No data available */
- #define ETIME 62 /* Timer expired */
- #define ENOSR 63 /* Out of streams resources */
- #define ENONET 64 /* Machine is not on the network */
- #define ENOPKG 65 /* Package not installed */
- #define EREMOTE 66 /* Object is remote */
- #define ENOLINK 67 /* Link has been severed */
- #define EADV 68 /* Advertise error */
- #define ESRMNT 69 /* Srmount error */
- #define ECOMM 70 /* Communication error on send */
- #define EPROTO 71 /* Protocol error */
- #define EMULTIHOP 72 /* Multihop attempted */
- #define EDOTDOT 73 /* RFS specific error */
- #define EBADMSG 74 /* Not a data message */
- #define EOVERFLOW 75 /* Value too large for defined data type */
- #define ENOTUNIQ 76 /* Name not unique on network */
- #define EBADFD 77 /* File descriptor in bad state */
- #define EREMCHG 78 /* Remote address changed */
- #define ELIBACC 79 /* Can not access a needed shared library */
- #define ELIBBAD 80 /* Accessing a corrupted shared library */
- #define ELIBSCN 81 /* .lib section in a.out corrupted */
- #define ELIBMAX 82 /* Attempting to link in too many shared libraries */
- #define ELIBEXEC 83 /* Cannot exec a shared library directly */
- #define EILSEQ 84 /* Illegal byte sequence */
- #define ERESTART 85 /* Interrupted system call should be restarted */
- #define ESTRPIPE 86 /* Streams pipe error */
- #define EUSERS 87 /* Too many users */
- #define ENOTSOCK 88 /* Socket operation on non-socket */
- #define EDESTADDRREQ 89 /* Destination address required */
- #define EMSGSIZE 90 /* Message too long */
- #define EPROTOTYPE 91 /* Protocol wrong type for socket */
- #define ENOPROTOOPT 92 /* Protocol not available */
- #define EPROTONOSUPPORT 93 /* Protocol not supported */
- #define ESOCKTNOSUPPORT 94 /* Socket type not supported */
- #define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
- #define EPFNOSUPPORT 96 /* Protocol family not supported */
- #define EAFNOSUPPORT 97 /* Address family not supported by protocol */
- #define EADDRINUSE 98 /* Address already in use */
- #define EADDRNOTAVAIL 99 /* Cannot assign requested address */
- #define ENETDOWN 100 /* Network is down */
- #define ENETUNREACH 101 /* Network is unreachable */
- #define ENETRESET 102 /* Network dropped connection because of reset */
- #define ECONNABORTED 103 /* Software caused connection abort */
- #define ECONNRESET 104 /* Connection reset by peer */
- #define ENOBUFS 105 /* No buffer space available */
- #define EISCONN 106 /* Transport endpoint is already connected */
- #define ENOTCONN 107 /* Transport endpoint is not connected */
- #define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
- #define ETOOMANYREFS 109 /* Too many references: cannot splice */
- #define ETIMEDOUT 110 /* Connection timed out */
- #define ECONNREFUSED 111 /* Connection refused */
- #define EHOSTDOWN 112 /* Host is down */
- #define EHOSTUNREACH 113 /* No route to host */
- #define EALREADY 114 /* Operation already in progress */
- #define EINPROGRESS 115 /* Operation now in progress */
- #define ESTALE 116 /* Stale NFS file handle */
- #define EUCLEAN 117 /* Structure needs cleaning */
- #define ENOTNAM 118 /* Not a XENIX named type file */
- #define ENAVAIL 119 /* No XENIX semaphores available */
- #define EISNAM 120 /* Is a named type file */
- #define EREMOTEIO 121 /* Remote I/O error */
- #define EDQUOT 122 /* Quota exceeded */
- #define ENOMEDIUM 123 /* No medium found */
- #define EMEDIUMTYPE 124 /* Wrong medium type */
- #define ECANCELED 125 /* Operation Canceled */
- #define ENOKEY 126 /* Required key not available */
- #define EKEYEXPIRED 127 /* Key has expired */
- #define EKEYREVOKED 128 /* Key has been revoked */
- #define EKEYREJECTED 129 /* Key was rejected by service */
- /* for robust mutexes */
- #define EOWNERDEAD 130 /* Owner died */
- #define ENOTRECOVERABLE 131 /* State not recoverable */
- #define ERFKILL 132 /* Operation not possible due to RF-kill */
- #define EHWPOISON 133 /* Memory page has hardware error */
- #endif
解释完了errno的含义,那么我们来用两个常用的错误输出函数
一个是perror
- void perror(const char *s);//根据系统设置好的errno的值来输出错误信息
- //错误信息会包含程序员自己填写的内容,以参数s传入程序员想要输出的内容
一个是strerror
- char *strerror(int errnum);//把errno传入到函数strerror中,strerror返回相应错误信息的文本
linux系统编程之错误处理的更多相关文章
- linux系统编程之错误处理:perror,strerror和errno
1,在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述. errno这个全局变量在<errno.h>头文件中声明如下:extern int errno; errno是 ...
- linux系统编程之错误处理机制
在讲解liunx错误处理机制之前我们先来看一段代码: #include<sys/types.h> #include<sys/stat.h> #include<fcntl. ...
- Linux系统编程温故知新系列 --- 01
1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...
- Linux系统编程@进程通信(一)
进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...
- 读书笔记之Linux系统编程与深入理解Linux内核
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...
- Linux系统编程【转】
转自:https://blog.csdn.net/majiakun1/article/details/8558308 一.Linux系统编程概论 1.1 系统编程基石 syscall: libc:标准 ...
- 《Linux系统编程(第2版)》
<Linux系统编程(第2版)> 基本信息 作者: (美)Robert Love 译者: 祝洪凯 李妹芳 付途 出版社:人民邮电出版社 ISBN:9787115346353 上架时间:20 ...
- linux系统编程之文件与io(一)
经过了漫长的学习,C语言相关的的基础知识算是告一段落了,这也是尝试用写博客的形式来学习c语言,回过头来看,虽说可能写的内容有些比较简单,但是个人感觉是有史起来学习最踏实的一次,因为里面的每个实验都是自 ...
- linux系统编程之文件与io(五)
上一节中已经学习了文件描述符的复制,复制方法有三种,其中最后一种fcntl还并未使用到,关于这个函数,不光只有复制文件描述符的功能,还有其它一些用法,本节就对其进行一一剖析: fcntl常用操作: 这 ...
随机推荐
- WAP端 穿透问题和解决方法
1. 穿透问题可这么理解, 共有2种问题: 问题1: 有A 和 B 两个弹层,B 弹层盖在A 弹层上面,B 弹层绑定 touchend 事件,当用户点击B 的时候 B隐藏,由于touchend 事件触 ...
- linux 学习8 权限管理
第八章 权限管理 8.1 ACL权限 8.2 文件特殊权限 8.3 文件系统属性chattr权限 8.4 系统命令sudo权限 8.1 ACL权限 ACL权限简介与开启 查看与设定ACL权限 最大有效 ...
- ArcEngine批量添加XY数据
使用ArcGIS Desktop “添加XY数据”或者“创建XY事件图层”工具 可以导入Excel坐标数据,生成临时图层并添加至ArcMap.ArcGlobe或者ArcScene中.在ArcEngin ...
- 获取HTML
public class GetHtml { public string GetWebRequest(string url) { Uri uri = new Uri(url); WebRequest ...
- PPTP VPN 限制一个账号只允许一个用户来登录
创建auth-up文件 vi /etc/ppp/auth-up chmod a+x /etc/ppp/auth-up auth-up脚本内容如下 #!/bin/sh # get the usernam ...
- IT行业果真跳槽快吗?
近年来IT行业越来越火爆,许多人也开始炒,月入万元不是梦,随随便便拿高薪之类的文章层出不穷,许多的青少年甚至中年人开始关注这块,许多人选择去学习it行业,也朝着月入万元的目标前进,然而,曾几何时,月入 ...
- C++STL学习笔记_(1)deque双端数组知识
#include<iostream> using namespace std; #include "deque" #include "algorithm&qu ...
- openvpn安装
1,wget http://swupdate.openvpn.org/as/openvpn-as-2.0.10-CentOS7.x86_64.rpm 2,passwd openvpn
- Zookeeper-Zookeeper可以干什么
在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, n ...
- 互联网商业模式O2O、C2C、B2B、B2C等介绍
O2O是online to offline分为四种运营模式: 1.online to offline是线上交易到线下消费体验 2.offline to online是线下营销到线上交易 3.offli ...