[Linux]出错处理errno
概述
公共头文件<errno.h>定义了一个整型值errno以及可以赋予它的各种常量。
大部分函数出错后返回-1,并且自动给errno赋予当前发生的错误枚举值。
需要注意的一点是,errno只有在错误发生时才会被复写,这就意味着如果按顺序执行AB两个函数,如果只有A函数出错,则执行完AB函数后errno依然保留着A函数出错的枚举值,
如果AB均出错,那么在B之前如果errno没有被处理,那么将会被B出错的枚举值所覆盖。
Linux
为了避免多线程环境共享一个errno,Linux系统定义了一个宏来解决这个问题,这个定义已经定义在<errno.h>系统头文件中。
extern int *__errno_location(void);
#define errno (*__errno_location())
最让人疑惑的是,你可以为此宏赋值,具体解析可以参考这个文章。
int main(void)
{
errno = ;
perror("");
errno = ;
perror("");
return ;
}
示例
#include <error.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
/*Already define in <error.h>*/
/*extern int *__errno_location(void);
#define errno (*__errno_location())*/ char buf[]; int main(void)
{
int re, my_errno; re = read(, buf, sizeof(buf));
if(re > -){
my_errno = ;
}else{
my_errno = errno;
perror("file error");
}
printf("%d\n", my_errno); re = ;
re = open("./not_exists_file", O_RDONLY);
if(re > -){
my_errno = ;
}else{
my_errno = errno;
perror("file error");
}
printf("%d\n", my_errno);
return ;
}
以上代码输出:
file error: Bad file descriptor file error: No such file or directory
[Linux]出错处理errno的更多相关文章
- Linux中errno使用 - [Linux]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.com/wzgyantai-logs/24470871.html 当linux中的C api函数发 ...
- linux 下errno各个值的意义(转) errno.h
strerror(errno):获取errno对应的错误 查看错误代码errno是调试程序的一个重要方法.当linux C api函数发生异常时,一般会将errno变量(需include errno. ...
- linux中errno使用(转)
当linux中的C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少 ...
- linux中errno及perror的应用
1 perror 定义在头文件<stdlib.h>中 void perror(const char *s);函数说明 perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 ...
- Linux中errno的含义
/****************************获取错误代码描述**************/ #include <string.h>#include <errno.h&g ...
- UNIX环境编程学习笔记(1):——出错处理errno
lienhua342014 年 8 月 24 日 1. errno变量 文件 <errno.h> 中定义了符号 errno 以及可以赋予它的各种常量,这些常量都是以字符 E 开头.例如,若 ...
- Linux C高级编程——文件操作之系统调用
Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的. 库函数是一些完毕特定功能的函数.一般由某个标准组织制作公布,并形成一定的标准.使用库函数编 ...
- 转:socket编程在windows和linux下的区别
如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...
- socket编程在windows和linux下的区别
如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...
随机推荐
- deeplearing4j学习以及踩过的坑
1. 添加dl4j后, run项目时, 一直run不起来, run按钮绿色但是点击没反应. 查看日志后发现: 是classpath太长导致的. 在本项目的.idea文件夹,找到文件夹中的works ...
- mysql 不同索引的区别和适用情况总结
最近在做sql优化,看到一篇有关sql索引不错的文章,转载一下. 一.索引类型 普通索引:INDEX 允许出现相同的索引内容 (normal) 唯一索引:UNIQUE 不可以出现相同的值,可以有NUL ...
- DAY30、网络编程
一.网络编程 软件开发 c/s架构 c:客户端 s:服务端 b/s架构 b:浏览器 s:服务端 本质:b/s其实也是c/s 服务端:24小时不间断提供服务,谁来救服务谁 客户端:想什么时候体验服务,就 ...
- HDU - 3247 Resource Archiver (AC自动机,状压dp)
\(\quad\)Great! Your new software is almost finished! The only thing left to do is archiving all you ...
- VSCode的Markdown All in One插件,列表选项卡只有3个空格的解决方案
Q: 在win10中,列表选项卡只有3个空格,非列表是正常的4个空格: A: 设置Markdown All in One的list.indentationSize: Thank You For yzh ...
- CF 1145 (愚人节比赛)
D题 题目就是让你找出题面中拼错的单词,拼错的字母组合成一句话就是正确的题面. two plus xor of third and min elements #include<bits/stdc ...
- 阿里云ECS服务器部署Node.js项目全过程详解
本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...
- vue 中的通过搜索框进行数据过滤的过程
<template> <div> <input type="text" v-model="searchId" placeholde ...
- mix-blend-mode
mix-blend-mode是一个css3新增的混合color与背景元素颜色的样式,同一个元素的两个颜色不影响. mix-blend-mode: normal; //正常mix-bl ...
- Knockoutjs 响应式计算研究
reactive programming https://en.wikipedia.org/wiki/Reactive_programming In computing, reactive progr ...