UNIX 環境高級編程(第三版)使用

1、下載源碼

http://apuebook.com/code3e.html

2、安裝依賴庫

     sudo apt-get install libbsd-dev  

3、解壓、編譯源碼

tar xvf src.3e.tar.gz
cd apue.3e/
make

4、可以將相關頭文件放在系統環境變量中

可以在apue.h 中添加附錄B中的內容

cp ./include/apue.h /usr/include/         
cp ./lib/libapue.a /usr/local/lib/ 
cp ./lib/libapue.a /usr/lib/
cp apueerror.h  /usr/include/

5、可以開始學習書中的內容了

 

附錄B,添加到apue.h中的內容

#include <errno.h>
#include <stdarg.h>


static void err_doit(int, int, const char *, va_list);  
  
/*  
 *  * Nonfatal error related to a system call.  
 *  * Print a message and return.  
 *  */  
void  
err_ret(const char *fmt, ...)  
{  
        va_list     ap;  
          
        va_start(ap, fmt);  
        err_doit(1, errno, fmt, ap);  
        va_end(ap);  
}  
  
/*  
 *  * Fatal error related to a system call.  
 *  * Print a message and terminate.  
 *  */  
void  
err_sys(const char *fmt, ...)  
{  
        va_list     ap;  
          
        va_start(ap, fmt);  
        err_doit(1, errno, fmt, ap);  
        va_end(ap);  
        exit(1);  
}  
  
/*  
 *  * Fatal error unrelated to a system call.  
 *  * Error code passed as explict parameter.  
 *  * Print a message and terminate.  
 *  */  
void  
err_exit(int error, const char *fmt, ...)  
{  
        va_list     ap;  
          
        va_start(ap, fmt);  
        err_doit(1, error, fmt, ap);  
        va_end(ap);  
        exit(1);  
}  
  
/*  
 *  * Fatal error related to a system call.  
 *  * Print a message, dump core, and terminate.  
 *  */  
void  
err_dump(const char *fmt, ...)  
{  
        va_list     ap;  
          
        va_start(ap, fmt);  
        err_doit(1, errno, fmt, ap);  
        va_end(ap);  
        abort();        /* dump core and terminate */  
        exit(1);        /* shouldn't get here */  
}  
  
/*  
 *  * Nonfatal error unrelated to a system call.  
 *  * Print a message and return.  
 *  */  
void  
err_msg(const char *fmt, ...)  
{  
        va_list     ap;  
          
        va_start(ap, fmt);  
        err_doit(0, 0, fmt, ap);  
        va_end(ap);  
}  
  
/*  
 *  * Fatal error unrelated to a system call.  
 *  * Print a message and terminate.  
 *  */  
void  
err_quit(const char *fmt, ...)  
{  
        va_list     ap;  
          
        va_start(ap, fmt);  
        err_doit(0, 0, fmt, ap);  
        va_end(ap);  
        exit(1);  
}  
  
/*  
 *  * Print a message and return to caller.  
 *  * Caller specifies "errnoflag".  
 *  */  
static void  
err_doit(int errnoflag, int error, const char *fmt, va_list ap)  
{  
        char    buf[MAXLINE];  
        vsnprintf(buf, MAXLINE, fmt, ap);  
        if (errnoflag)  
        snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s",strerror(error));  
        strcat(buf, " ");  
        fflush(stdout);     /* in case stdout and stderr are the same */  
        fputs(buf, stderr);  
        fflush(NULL);       /* flushes all stdio output streams */  
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章