首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于linux上面资源释放的有关问题

2012-08-10 
关于linux下面资源释放的问题在C++下面,直接关掉应用程序,可以在析构函数中释放掉资源。最后肯定会调用析构

关于linux下面资源释放的问题
在C++下面,直接关掉应用程序,可以在析构函数中释放掉资源。最后肯定会调用析构函数。

刚接触Linux下C编程,C程序怎么能保证:当应用程序直接关掉,即Ctrl+C后,如何将申请的资源释放掉呢??
想不出啥好办法了、、请教。
就是如果申请了一块堆空间,怎么样在最后的时候释放掉呢??如何触发??谢谢了

[解决办法]
捕捉到Ctrl+C ,执行释放函数

C/C++ code
void handler(int sig){    switch(sig)    {        case SIGINT:printf("捕捉到CTRL+C信号\n");break;        case SIGQUIT:printf("捕捉到CTRL+\\信号\n");break;        case SIGTERM:printf("捕捉到CTRL+Z信号\n");break;    }    print_list(head);    free_list();    int err;    /*取消线程1*/    err = pthread_cancel(tid1);    if(err != 0)    {        perror("cancle 1 wrong");        exit(0);    }    /*取消线程2*/    err = pthread_cancel(tid2);    if(err != 0)    {        perror("cancle 2 wrong");        exit(0);    }    /*取消线程3*/    err = pthread_cancel(tid3);    if(err != 0)    {        perror("cancle 3 wrong");        exit(0);    }    printf("==============exit...==============\n");    //exit(1);}//信号中断操作void signalset(){    /*Ctrl + C*/    if(signal(SIGINT,handler) == SIG_ERR)    {        perror("ctrl+c wrong!\n");        exit(0);    }    /*Ctrl + \*/    if(signal(SIGQUIT,handler) == SIG_ERR)    {        perror("ctrl + \\ wrong!\n");        exit(0);    }    /*Ctrl + Z*/    if(signal(SIGTERM,handler) == SIG_ERR)    {        perror("ctrl + z wrong!\n");        exit(0);    }}
[解决办法]
在C++中,你直接关掉应用程序,这个“关掉”动作调用了析构函数
同理,在C中,你把结束处理和“退出”这个动作关联起来就行了

有些情况是没办法的
例如,你直接kill掉线程,不管是C还是C++,都别想有任何结束处理的机会

热点排行