对于Linux中errno使用的问题

 当linux中的C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。有下面几种方法可以方便的得到错误信息
  (1)void perror(const char *s)
函数说明
perror ( )用来将上一个函数发生错误的原因输出到标准错误(stderr),参数s 所指的字符串会先打印出,后面再加上错误原因 字符串。此错误原因依照全局变量 errno 的值来决定要输出的字符串。
  (2) char *strerror(int errno)
将错误代码转换为字符串错误信息,可以将该字符串和其它的信息组合输出到用户界面例如
fprintf(stderr,"error in CreateProcess %s, Process ID %d ",strerror(errno),processID)
注:假设processID是一个已经获取了的整形ID
  (3)printf("%m", errno);
另外不是所有的地方发生错误的时候都可以通过error获取错误代码,例如下面的代码段
最近在网络编程使用的过程中,发现errno会经常使用。因此决定在此做个留用,以备以后使用。。。

 虽然errno是非线程安全的,但是可以通过几种机制保证其安全。。

 最近在使用的过程中获得了errno,程序无法执行,也不知道如何解决问题。因此,理解每一个返回的errno整数值的含义是很重要的。。

这个我们可以通过strerror函数来实现。。

strerror(返回整数errno对应的错误原因的描述字符串)

所需头文件:  #include<string.h>
函数声明:    char * strerror(int errnum);

输入:          整数errno

输出:         返回描述错误原因的字符串指针
功能:         用来依参数errnum 的错误代码来查询其错误原因的描述字符串,然后将该字符串指针返回。
示例:
#include <string.h>
#include <stdio.h>

#define NUM    150
int main(void)
{
    int i;    
    for ( i=0; i<NUM; i++ )
    {
        printf( "%d:%s\n", i, strerror(i) );
    }       
    return 0;
}

运行结果:

0:Success
1:Operation not permitted
2:No such file or directory
3:No such process
4:Interrupted system call
5:Input/output error
6:No such device or address
7:Argument list too long
8:Exec format error
9:Bad file descriptor


#include <stdio.h>
#include <string.h>
#include <errno.h> 

int main(void)
{
int   fd;
extern int errno;

if((fd = open("/dev/dsp",O_WRONLY)) < 0)
{
printf("errno=%d\n",errno); 
char * mesg = strerror(errno);
printf("Mesg:%s\n",mesg); 

}

exit(0);
}
dsp设备忙的话将输出如下:
errno=16
Mesg:Device or resource busy


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值