linux下《UNIX环境高级编程》(apue2)源码编译出错的处理方法

 

linux下《UNIX环境高级编程》(apue2)源码编译出错的处理方法

 

在阅读unix环境高级编程的过程中相信很多人在编译的过程中会遇到问题,比如什么是apue.h头文件,以及对出错处理的方式处理方法。对于apue.h的头文件不是直接得到的需要相应的程序生成。

 

1.APUE2源代码下载:http://www.apuebook.com/src.tar.gz

2.保存到相应的目录下:我保存在/home/unix_program/下.解压缩:tar -xzvf src.tar.gz

3.cd apue.2e进入apue.2e目录,查看README,对于linux系统只需修改Make.defines.linux文件.

4.vi Make.defines.linux 修改WKDIR=/root/apue.2e 就是说工作目录为WKDIR=/home/unix_program/apue.2e

5.修改/home/unix_program/apue.2e/std/linux.mk把全部的nawk改为awk.因些linux默认没有nawk

6.make

 

最后在apue.h的目录apue.2e/include/apue.h下生成,并复制到/usr/include/目录下.

 

对于像err_sys的函数(在书中的附录B中).同样的方法是在/usr/include新建一个 my_err.h的文件,把下面的程序写到这个头文件里面.在编程只需要在行首添加:#include "my_err.h"就可以了。所贴的代码如下:#include"apue.h" #include<errno.h>/* for definition of errno */ #include<stdarg.h>/* ISO C variable aruments */ staticvoiderr_doit(int,int,constchar*,va_list); /* * Nonfatal error related to a system call. * Print a message and return. */ void err_ret(constchar*fmt,...) { va_listap; 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(constchar*fmt,...) { va_listap; 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(interror,constchar*fmt,...) { va_listap; 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(constchar*fmt,...) { va_listap; 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(constchar*fmt,...) { va_listap; 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(constchar*fmt,...) { va_listap; 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". */ staticvoid err_doit(interrnoflag,interror,constchar*fmt,va_listap) { charbuf[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 */ } 

转载:http://haoshuang3394.javaeye.com/blog/418327

 

你可能感兴趣的:(编程,linux,unix,list,System,output)