UNP学习第一步:unp.h的安装及第一个程序的运行

UNP学习第一步:unp.h的安装及第一个程序的运行

1.源代码编译

在书籍网站点击此处即可上下载本书源码
解压到本地文件夹

tar -xzf unpv13e.tar.gz

进入解压后的文件夹,阅读README说明文件。根据说明文件的要求,按如下步骤完成配置。
运行./configure,用于分析本地环境,为代码进行正确配置
进入lib文件夹,运行make ,用于编译unp.h对应的静态库
进入libfree文件夹,运行make,继续编译基本运行库。
注:此时有可能会发生如下错误:

inet_ntop.c: In function ‘inet_ntop’:
inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype size_t size;
In file included from inet_ntop.c:27:0:
/usr/include/arpa/inet.h:64:20: error: prototype declaration extern const char *inet_ntop (int __af, const void *__restrict __cp,<builtin>: recipe for target 'inet_ntop.o' failed
make: *** [inet_ntop.o] Error 1

这是由于unp.h中的一个变量描述和inet_ntop.c中的类型不一致引起的,因此只需要编辑inet_ntop.c文件中的第60行,将类型size_t改为socklen_t即可。
解决错误后继续完成make,可能会存在一些无关痛痒的warning,但能看到代码已经被编译到../libunp.a中了。
在README中的第三和第四步分别适用于其他UNIX系统,Linux系统不需要执行这两步。
最后对编译出来的静态库进行测试:进入intro文件夹,运行make daytimetcpcli,能得到可运行文件daytimetcpcli。至此unp的运行库已经编译成功。

2.静态库安装

在.\lib\unp.h头文件中,将#include "…/config.h"改为#include “config.h”,因为我们即将把这两个文件移动到同一路径下。
将.\lib\unp.h以及./config.h两个文件复制到./usr/include文件夹下。

sudo cp config.h /usr/include
sudo cp lib/unp.h /usr/include

将编译好的运行库(libunp.a)分别复制到usr/lib和usr/lib32文件夹下。

sudo cp libunp.a /usr/lib
sudo cp libunp.a /usr/lib32

测试安装是否正确:使用GCC编译本书第一个示例程序intro/daytimetcpcli.c
gcc intro/daytimetcpcli.c -o daytimetcpcli -lunp

其中-lunp表示在链接时在默认路径中使用libunp.a库。
此时会在当前文件夹下生成可执行文件daytimetcpcli,表示已经正确配置本书需要的运行环境。
最后,运行第一个程序
./daytimetcpcli 127.0.0.1

不出意外会出现错误提示connect error: Connection refused,这是因为本地主机并未启用daytime服务。

3.运行第一个程序

启动daytime服务
输入xinetd,如果没有输出,则代表服务已经安装了,只是未启用,反之需要安装服务。
sudo apt install xinetd

等待安装完成即可,但默认daytime服务是不会启用的,所以需要进一步配置。
使用管理员权限编辑/etc/xinetd.d/daytime文件,将第一个disable项改为no(注:第一个service代表tcp版本,后一个为udp版本,在这里我们只需要启用tcp版本的daytime服务即可),保存文件。
重新启动xinetd服务
sudo /etc/init.d/xinetd restart

一般来说可以观察到xinetd服务的停止与启动。
回到最初的文件夹,运行上节编译好的daytimetcpcli程序,此时可以得到正确的时间。

第一个程序运行成功。

./daytimetcpcli 127.0.0.1

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值