免费注册 查看新帖 |

Chinaunix

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

求助:一行代码不能理解,以前没见过 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-24 18:55 |只看该作者 |倒序浏览
代码如下:

  1.     /* 声明出错代码 */
  2.     #define     ERR_NO_ERROR    0  /* No error                 */
  3.     #define     ERR_OPEN_FILE   1  /* Open file error          */
  4.     #define     ERR_SEND_MESG   2  /* sending a message error  */
  5.     #define     ERR_BAD_ARGS    3  /* Bad arguments            */
  6.     #define     ERR_MEM_NONE    4  /* Memeroy is not enough    */
  7.     #define     ERR_SERV_DOWN   5  /* Service down try later   */
  8.     #define     ERR_UNKNOW_INFO 6  /* Unknow information       */
  9.     #define     ERR_SOCKET_ERR  7  /* Socket operation failed  */
  10.     #define     ERR_PERMISSION  8  /* Permission denied        */
  11.     #define     ERR_BAD_FORMAT  9  /* Bad configuration file   */
  12.     #define     ERR_TIME_OUT   10  /* Communication time out   */
  13.   
  14.     /* 声明出错信息 */
  15.     char* errmsg[] = {
  16.         /* 0 */       "No error",
  17.         /* 1 */       "Open file error",
  18.         /* 2 */       "Failed in sending/receiving a message",
  19.         /* 3 */       "Bad arguments",
  20.         /* 4 */       "Memeroy is not enough",
  21.         /* 5 */       "Service is down; try later",
  22.         /* 6 */       "Unknow information",
  23.         /* 7 */       "A socket operation has failed",
  24.         /* 8 */       "Permission denied",
  25.         /* 9 */       "Bad configuration file format",
  26.         /* 10 */      "Communication time out",
  27.         /* 10 */      "Communication time out",
  28.     };
  29.   
  30.     /* 声明错误代码全局变量 */
  31.     long errno = 0;
  32.   
  33.     /* 打印出错信息函数 */
  34.     void perror( char* info)
  35.     {
  36.         if ( info ){
  37.             printf("%s: %s\n", info, errmsg[errno] );
  38.             return;
  39.         }
  40.   
  41.         printf("Error: %s\n", errmsg[errno] );
  42.     }

  43.     bool CheckPermission( char* userName )
  44.     {
  45.         if ( strcpy(userName, "root") != 0 ){
  46.             errno = ERR_PERMISSION_DENIED;
  47.             return (FALSE);
  48.         }
  49.   
  50.         ...
  51.     }
  52.   
  53.     main()
  54.     {
  55.         ...
  56.         if (! CheckPermission( username ) ){
  57.             perror("main()");                     //就是这行,传入"main()"是啥意思?
  58.         }
  59.         ...
  60.     }

复制代码





谢谢大家指教

论坛徽章:
0
2 [报告]
发表于 2006-12-24 18:56 |只看该作者
表示出错位置?

论坛徽章:
0
3 [报告]
发表于 2006-12-24 19:13 |只看该作者

回复 1楼 ddload 的帖子

perror就是打印错误信息的函数。
void perror(const char *s);
man一下就明白了。

论坛徽章:
0
4 [报告]
发表于 2006-12-24 19:16 |只看该作者
谢谢!
豁然开朗啊
脑子烧糊了……

[ 本帖最后由 ddload 于 2006-12-24 19:19 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-12-24 19:36 |只看该作者
传入where就知道错在哪里了。现在有__FUNCTION__就更方便了

论坛徽章:
0
6 [报告]
发表于 2006-12-24 19:41 |只看该作者
"main()" 只是一个常量字符串而已,作为参数传给 perror()。man perror 可以获得更多信息。

论坛徽章:
0
7 [报告]
发表于 2006-12-24 19:50 |只看该作者
多谢大家关注
小弟感激不尽……

论坛徽章:
0
8 [报告]
发表于 2006-12-25 17:21 |只看该作者
perror就是打印错误信息的函数。
void perror(const char *s);
man一下就明白了。

???  是吗? 不是把 在这个代码里面 它不是又申明了一个 void perror( char* info)


if (! CheckPermission( username ) ){


会调用
            errno = ERR_PERMISSION_DENIED;
            return (FALSE);

已经设置了 errno

/* 声明错误代码全局变量 */
    long errno = 0;

有够晕的, 居然申明了和系统变量一样的变量。 建议tjjds.


再调用
void perror( char* info)
    {
        if ( info ){
            printf("%s: %s\n", info, errmsg[errno] );
            return;
        }
  
        printf("Error: %s\n", errmsg[errno] );
    }

这个时候errno 已经设置过了  可以找出出错原因了。


我感觉最大的问题 是设置了和系统一样的变量和函数, 联结的时候很可能出问题。或者出现交叉的问题

论坛徽章:
0
9 [报告]
发表于 2006-12-25 19:47 |只看该作者
这块代码从哪抽出来的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP