Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1247774
  • 博文数量: 261
  • 博客积分: 4196
  • 博客等级: 上校
  • 技术积分: 3410
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-17 17:05
文章分类

全部博文(261)

文章存档

2018年(1)

2017年(22)

2016年(2)

2015年(8)

2014年(27)

2013年(40)

2012年(161)

分类: LINUX

2012-04-17 11:00:00

关于全局变量:三个文件,head.h main.c program.c;
1. 如在head.h里定义int aaa;在main.c和program.c中添加#include ;则在两个文件中都可以用全局变量aaa,
2. 不在head.h中定义,main.c中定义int aaa;则在program.c中要加extern aaa;才能用全局变量。
以上两种情况,aaa都可以在子函数里改变,在main函数中也随之一起改变。
3. 在main函数里定义的变量bbb,再在子函数中重定义一边,不影响main函数中的变量。
关于头文件:三个文件,head.h main.c program.c放在同一目录下;
编译时,gcc -o out main.c program.c -I /.../(head.h存放目录)
4. 编译时出现“警告:字符常量大小超出其类型”
        case 'ELOG_DEBUG':strcat(logstr," ELOG_DEBUG");
                break;
        case 'ELOG_NORMAL':strcat(logstr," ELOG_NORMAL");
                break;
        case 'ELOG_NOTICE':strcat(logstr," ELOG_NOTICE");
                break;
        case 'ELOG_ERROR':strcat(logstr," ELOG_ERROR");
                break;
        case 'ELOG_CRITICAL':strcat(logstr," ELOG_CRITICAL");
                break;
  在编译时,警告这些行“字符常量大小超出其类型”是由于'ELOG_DEBUG'字符常量太长!
5. libxml2的内存泄漏!
  Linux下:
int readstrxml(char *psfilename,char *node)

    int n = 0;
    xmlDocPtr     pdoc = NULL;
    xmlNodePtr    proot = NULL, curNode = NULL,sonNode = NULL;
    xmlChar *szKey;
    pdoc = xmlParseMemory(psfilename, strlen(psfilename));
   ……
    xmlFreeDoc(pdoc);
//    xmlCleanupParser();
//    xmlMemoryDump();*/
    return 0;
  }
int readfilexml(void)
{
    int n = 0;
    char *psfilename="/etc/watch-dog.xml";        //configure file path
    xmlDocPtr     pdoc = NULL;
    xmlNodePtr    proot = NULL, curNode = NULL;
    xmlChar *szKey;
    pdoc = xmlReadFile (psfilename, "UTF-8", XML_PARSE_RECOVER);
    ……
    xmlFreeDoc(pdoc);
    xmlCleanupParser();
    xmlMemoryDump();
}
int main(int argc,char *argv[])
{
    ret = readfilexml();
    if(ret < 0)
    {
        printf("readfilexml error\n");
        return -1;
    }
    ret = pthread_create(&tid, NULL, udpser, NULL);
    if( ret != 0)
    {
        perror("pthread_create:");
        return -1;
    }
    ……

void *udpser(void *arg)
{
        ret = readstrxml(buf,node);
        if(ret < 0)
        {
            printf("app responsion error!\n");
            continue;
        }
    ……


    xmlCleanupParser();    xmlMemoryDump();这两个函数只能在udpser线程中调用,否则会出现内存泄漏!
阅读(1646) | 评论(0) | 转发(0) |
0

上一篇:时间编程

下一篇:线程编程

给主人留下些什么吧!~~