《POSIX多线程程序设计》笔记(2)作者自己写的两个调试宏函数源码

开始看前面几个“闹钟”代码时,没找到errors.h到底在哪儿,原来。。。

 

#include <pthread.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main(int argc, char *argv[])
{
    pthread_t thread;
    int status;

    /*自死锁示例:
     *      大多数情况下,未初始化的pthread_t变量是一个无效线程ID,调用线程回收函数能正常检查出错误原因;
            但也有可能未初始化的值是一个有效的ID,此时,这个线程就进入了自死锁了.*/
    status = pthread_join(thread, NULL);
    if (status != 0)
    {
        /*strerror:
         *      区别于perror当关注当前errno对应的信息到标准错误,
         *      strerror是指定一个errno,并返回错误字符串,没有重定向到标准设备.*/
        fprintf(stderr, "error %d: %s\n", status, strerror(status));                                                                  
        return status;
    }   
    return 0;
} 

 

#ifndef __errors_h                                                                                                                    
#define __errors_h

#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef DEBUG
#define DPRINTF(arg) printf arg
#else
#define DPRINTF(arg)
#endif

#define err_abort(code, text) do { \
    fprintf(stderr, "%s at \"%s\":%d: %s\n", \
            text, __FILE__, __LINE__, strerror(code)); \
    abort(); \
    } while(0)
#define errno_abort(text) do { \
    fprintf(stderr, "%s at \"%s\":%d: %s\n", \
            text, __FILE__, __LINE__, strerror(code)); \
    abort(); \
    } while(0)

#endif

 

上一篇:wdcp日志


下一篇:【2022年研究生入学考试中国海洋大学930大题答案】编程题2:有两个文件,让用户输入这两个文件的名称,然后将第一个文件的数据复制到第二个文件中。(10分) 科目:程序设计基础