免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1375 | 回复: 0
打印 上一主题 下一主题

linux/unix系统错误定义errno [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-01 12:19 |只看该作者 |倒序浏览
每当在一个unix函数中发生错误时,全局变量errno将被自动置成一个指示错误类型的正值,函数本身则通常返回-1。不同的值表示不同的含义,可以通过查看该值推测出错的原因,调试程序。
errno的值只在函数发生错误时设置,如果函数不返回错误,errno的值就是未定义的。errno的值通常在中定义。形式如下:
#define    EPERM         1    /* Operation not permitted */
#define    ENOENT         2    /* No such file or directory */
#define    ESRCH         3    /* No such process */
#define    EINTR         4    /* Interrupted system call */
#define    EIO         5    /* I/O error */
#define    ENXIO         6    /* No such device or address */
#define    E2BIG         7    /* Argument list too long */
#define    ENOEXEC         8    /* Exec format error */
#define    EBADF         9    /* Bad file number */
#define    ECHILD        10    /* No child processes */
#define    EAGAIN        11    /* Try again */
#define    ENOMEM        12    /* Out of memory */
#define    EACCES        13    /* Permission denied */
......
从1开始,共100多个。
要查看errno的返回值,可通过下面两个函数:
#include
void perror(const char *msg);//输出格式为:msg:errno对应的错误信息(加上一个换行符);
#include  
char *strerror(int errnum);//通过参数 errnum (就是errno),返回errno对应的错误信息。
#include
#include
#include
#include
int main(int argc, char *argv[])
{
FILE *fp;
char *buf;
if( (fp = fopen(argv[1], "r")) == NULL)
{
  perror("perror");
  errno = 12;
  printf("strerror: %s\n", strerror(errno));
  exit(1);
}
perror("perror");
errno = 13;
printf("strerror: %s\n", strerror(errno));

fclose(fp);
return 0;
}
--------------------------------------------------------------------
输入一个存在的文件名,如:./a.out 111
open失败则会输出:
perror: No such file or directory
strerror: Cannot allocate memory
open成功则会输出:
perror: Success
strerror: Permission denied
                                       
                                       
                               
                                       
                                       
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/103462/showart_2083877.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP