unix网络编程(卷一)--安装源码

这篇博客记录了如何安装Unix网络编程第三版的源码。从下载unpv13e.tar.gz开始,经过解压、配置、编译过程,遇到net/if_dl.h缺失的问题,但不影响最终目标。作者在Ubuntu 12.04 32位系统中完成了libunp.a的安装,并将头文件unp.h和config.h移到/usr/include,修改了unp.h的#include路径,以便后续使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从今天开始学习unix网络编程,希望能够坚持下去,就先从安装源码开始吧:

1.从网上下载unix网络编程第三版的源码:unpv13e.tar.gz

2.使用tar命令解压,tar -zxvf  unpv13e.tar.gz   ,然后进入目录中,打开README文件,按照步骤一次执行:

 ./configure    # try to figure out all implementation differences

    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
    make

    cd ../libroute  # only if your system supports 4.4BSD style routing sockets
    make             # only if your system supports 4.4BSD style routing sockets
  报错:unproute.h:3:45: 致命错误: net/if_dl.h:没有那个文件或目录编译中断。
             make: *** [get_rtaddrs.o] 错误 1


    cd ../libxti     # only if your system supports XTI
    make           # only if your system supports XTI

  (在我的电脑上这两个make没有通过,也不要紧,看后面的注释可以看到它们对应于特定的平台才会通过,这里不影响我们编译该客户端服务器时间日期程序)


 接着往下:
    cd ../intro    # build and test a basic client program
  make daytimetcpsrv
   此时会生成   daytimetcpsrv daytimetcpsrv.o 
<现在用gcc -o  daytimetcpsrv   daytimetcpsrv.c编译会出错,因为还需要libunp.a,也就是使用:gcc -o  daytimetcpsrv   daytimetcpsrv.c -lunp>

  这一步在README文件中没有写出,需要小心。假如我们没有执行make daytimetcpsrv,而是直接执行make daytimetcpcli,然后输入 ./daytimetcpcli 127.0.0.1 后发现报错;Connection Refused。
 后来解决了这个问题,原来是因为这个版本的系统默认是不开daytime服务的,而且开启daytime服务需要有root权限,然后你会看到在相同的目录下有一个daytimetcpsrv.c文件,编译(make daytimetcpsrv)后执行它,注意需要有root权限,即sudo   ./daytimetcpsrv。它的功能就是开启本机的daytime服务,然后你再开启一个终端,执行./daytimetcpcli 127.0.0.1就ok了。

    make daytimetcpcli
   此时会生成  daytimetcpcli daytimetcpcli.o

3、linux现在因为安全问题,各个发行版本默认是不开daytime服务的。  
   
  第一个例子实际上是两个程序,客户端和服务端,你很有可能只运行了客户端,没有运行服务端程序。  
  PS:由于要打开端口,所以服务端程序需要用root权限执行,所以你可以先   
  sudo   ./daytimetcpsrv  (如果本身就是root就不需要sudo)<要打开小于1024端口的服务,要用root才能执行>

  然后再开一个终端B运行   ./daytimetcpcli 127.0.0.1  就可以看到返回的时间了  
   A终端:alex@alex:~/unpv13e/intro$ sudo ./daytimetcpsrv 
   B终端:alex@alex:~/unpv13e/intro$ ./a.out 127.0.0.1
                  Wed Jun 11 23:38:07 2014


4.完成操作之后,找到libunp.a,复制这个静态库libunp.a到/usr/lib/和/usr/lib64/中;

(ubuntu12.04 32位系统中没有/usr/lib64目录,所以只复制到了/usr/lib中)

接下来在目录中找到unp.h和config.h,在以后的代码中都要用到这两个头文件,将他们复制到/usr/include中,为了以后include方便。

 将unp.h中的#include "../config.h"修改为#include "config.h" 

这样我们的环境就搭建好了,但是以后编译的时候在gcc的最后加上-lunp导入静态库就可以了。




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值