Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4065959
  • 博文数量: 251
  • 博客积分: 11197
  • 博客等级: 上将
  • 技术积分: 6862
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 14:41
个人简介

@HUST张友东 work@taobao zyd_com@126.com

文章分类

全部博文(251)

文章存档

2014年(10)

2013年(20)

2012年(22)

2011年(74)

2010年(98)

2009年(27)

分类: LINUX

2010-09-15 15:07:17

Linux系统的系统调用通过设置全局errno来标示错误类型http://blog.chinaunix.net/u2/87570/showart_2137607.html,并通过perrorsperror函数提供对errno的解析。

 

而我们平时写程序的错误处理方式类似于下面的代码:

if ( p == NULL ){
  printf ( "ERR: The pointer is NULL\n" );
}

if(socket(PF_INET, SOCK_STREAM, 0) < 0) {
    printf(“create socket errr\n”);
}


这种方式虽然没什么问题,但其对相同的问题缺乏共性的处理,错误处理应以统一的形式进行处理,那么该如何实现诸如errno错误处理的方式呢?

 

/* 声明出错代码 */
#define   ERR_NO_ERROR  0 /* No error         */
#define   ERR_OPEN_FILE  1 /* Open file error     */
#define   ERR_SEND_MESG  2 /* sending a message error */
#define   ERR_BAD_ARGS  3 /* Bad arguments      */
#define   ERR_MEM_NONE  4 /* Memeroy is not enough  */
#define   ERR_SERV_DOWN  5 /* Service down try later  */

/* 声明出错信息 */
char* errmsg[] = {
  /* 0 */    "No error",        
  /* 1 */    "Open file error",    
  /* 2 */    "Failed in sending/receiving a message", 
  /* 3 */    "Bad arguments", 
  /* 4 */    "Memeroy is not enough",
  /* 5 */    "Service is down; try later",
};

/* 声明错误代码全局变量 */
long errno = 0;
  
/* 打印出错信息函数 */
void perror( char* info)
{
  if ( info ){
      printf("%s: %s\n", info, errmsg[errno] );
    return;
   } 
   printf("Error: %s\n", errmsg[errno] );
}

/* 这个基本上是ANSI的错误处理实现细节了,当你程序中有错误时你就可以这样处理 */
bool CheckPermission( char* userName )
{
  if ( strcpy(userName, "root") != 0 ){
    errno = ERR_PERMISSION_DENIED;
    return (FALSE);
   }
    …
}
  
int main()
{
    ...
    if (! CheckPermission( username ) ){
      perror("main()");
    }
    ...
}


阅读(1910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~