最终效果:
可以看见最后都是以#include包含进来的,看上去比较整洁
我的目录是/home/lbs/Cspace
所有的项目都创建在齐下,比如/home/lbs/Cspace/UNP-SOC
好了,先把unp.h解决:
下载地址http://www.apuebook.com/src.tar.gz
我直接下载到/home/lbs/Downloads/下,
cd /home/lbs/Downloads
tar xf src.tar.gz
cd apue.3e
修改Make.defines.linux文件中,
WKDIR=/home/lbs/Downloads/apue.3e
make
这样就可以编译通过了,复制apue.3e/include/apue.h到/usr/include下,
apue.3e/lib/libapue.a 到/usr/lib/和 /usr/lib64下。
解决myerr.h:
里面包含了err_*之类的函数实现。
cd /usr/include
vim myerr.h
把一下代码复制进去,保存,就ok了
#include "apue.h"
#include <errno.h> /* for definition of errno */
#include <stdarg.h> /* ISO C variable aruments */
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 */
}
解决unp.h:
http://www.unpbook.com/unpv13e.tar.gz
仍然下载到/home/lbs/Downloads中
解压后
cd unpv13e
cd lib # build the basic library that all programs need
make # use "gmake" everywhere on BSD/OS systems
cd ../libfree # continue building the basic library
inet_ntop.c第61行 size_t size ->改成 socklen_t size
make
这样可以产生libunp.a,复制这个静态库到/usr/lib/和/usr/lib64/
修改lib/unp.h,
#include "../config.h"改成 #include "config.h"
添加一行:
#define MAX_LINE 2048
把unp.h和config.h都复制到/usr/include中。
然后在eclipse的项目属性中设置成这样
OVER!!!