Unix环境编程----出错处理(errno)
2013-07-23 10:25
232 查看
当Unix函数出错时,通常会返回一个负值,而且整型变量errno通常被设置为包含出错信息的一个值。
整型变量errno包含在头文件<errno.h>中,该文件中包含了errno的各种取值,这些取值通常以字母E开头(例如:EACCESS表示没有访问权限).
在以前的Unix系统中通常将errno定义为:
extern int errno
但是在引入多线程的概念后,由于多线程共享内存的地址空间,每个线程都应该有属于它自己的局部errno以防止线程之间的干 扰。Linux为了支持多线程存取errno,将其定义为:
extern int *__errno_location()
#define errno (*__errno_location())
对于errno应该知道两条规则:
1. 如果函数没有出错,errno的值就不会被重置,在这种情况下查看errno的值没有意义,所以当且仅当函数调用出错时才去查看errno 的值。
2. 任意函数都不会将errno的值置为0,在<errno.h>中定义的常量都不为0.
为了方便查看错误信息,标准C提供了如下两个函数:
1. char *strerror(int errno)
该函数将错误码errno作为参数,将该错误码表示的详细信息作为字符串返回。
如果文件/tmp/wahaha不存在,将打印:
No such file or directory
2. void perror(char *message)
perror 封装了错误码errno,将error表示的错误信息重定向到stderr上,其输出格式为:message:errno表示的错误信息.
<span style="font-family:Courier New;font-size:14px;"> #include<stdio.h>
#include<string.h>
#include<error.h>
int
main()
{
FILE *fp;
fp = fopen("/tmp/wahaha","r");
if(!fp)
{
perror("This is a error msg");
}
return 0;
}</span>
如果文件/tmp/wahaha不存在,将打印:
This is a error msg: No such file or directory
整型变量errno包含在头文件<errno.h>中,该文件中包含了errno的各种取值,这些取值通常以字母E开头(例如:EACCESS表示没有访问权限).
在以前的Unix系统中通常将errno定义为:
extern int errno
但是在引入多线程的概念后,由于多线程共享内存的地址空间,每个线程都应该有属于它自己的局部errno以防止线程之间的干 扰。Linux为了支持多线程存取errno,将其定义为:
extern int *__errno_location()
#define errno (*__errno_location())
对于errno应该知道两条规则:
1. 如果函数没有出错,errno的值就不会被重置,在这种情况下查看errno的值没有意义,所以当且仅当函数调用出错时才去查看errno 的值。
2. 任意函数都不会将errno的值置为0,在<errno.h>中定义的常量都不为0.
为了方便查看错误信息,标准C提供了如下两个函数:
1. char *strerror(int errno)
该函数将错误码errno作为参数,将该错误码表示的详细信息作为字符串返回。
<span style="font-family:'Courier New';color:#33033;"> #include<stdio.h> #include<string.h> #include<errno.h> int main() { FILE *fp; fp = fopen("/tmp/wahaha","r"); if(!fp) { printf("%s\n", strerror(errno)); } return 0; }</span>
如果文件/tmp/wahaha不存在,将打印:
No such file or directory
2. void perror(char *message)
perror 封装了错误码errno,将error表示的错误信息重定向到stderr上,其输出格式为:message:errno表示的错误信息.
<span style="font-family:Courier New;font-size:14px;"> #include<stdio.h>
#include<string.h>
#include<error.h>
int
main()
{
FILE *fp;
fp = fopen("/tmp/wahaha","r");
if(!fp)
{
perror("This is a error msg");
}
return 0;
}</span>
如果文件/tmp/wahaha不存在,将打印:
This is a error msg: No such file or directory
相关文章推荐
- UNIX环境编程学习笔记(1):——出错处理errno
- UNIX环境编程学习笔记(1):——出错处理errno
- unix环境高级编程-1.7-出错处理
- UNIX环境高级编程1.7出错处理
- Unix环境编程-出错处理
- unix c编程:出错处理errno
- 在编译Unix环境高级编程中遇到errno: TLS definition in /lib/libc.so.6 section...
- unix network programming volume 2 interprocess communications second edition环境搭建出错的处理
- Unix环境编程——错误信息显示(errno)
- 编译unix环境高级编程第一个例子出错解决
- unix环境高级编程-alarm、pause()与信号处理函数
- 编译unix环境高级编程第一个例子出错解决
- Linux 系统应用编程——出错处理(errno)
- unix环境高级编程一书中部分错误处理函数
- Linux环境高级编程--出错处理(CLStatus)
- UNIX环境编程学习笔记(23)——信号处理初步学习
- UNIX环境编程-----原始套接字-----疑问:发送给原始套接字的数据是怎么处理的???
- UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数
- UNIX环境编程学习笔记(23)——信号处理初步学习
- UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数