笔者的机器为:
macOS 10.13.6
1.首先在本地下载书上的源代码的压缩包,地址为:
http://www.unpbook.com/unpv13e.tar.gz
2.本地解压到桌面(方便后续的操作)
3.通过终端将解压后的unpv13e文件夹,上传到远程的阿里云服务器(自购),命令大体上为:
scp -i ~/.ssh/id_rsa -r unpv13e username@地址:服务器上的某位置
我个人是上传到普通用户下
4.接下来按照
https://github.com/unpbook/unpv13e
上的README操作,即:
1.cd到unpv13e目录下
2.执行 ./configure
3.cd到lib下,执行make
4.cd到libfree下,执行make会报错:
执行 vim inet_ntop.c ,将size_t size改成socklen_t size
5.再次make
5.这一步骤参考:
将生成的 libunp.a 静态库复制到/usr/lib/ 和 /usr/lib64/ 中
cd .. //回到 unpv13e 目录
sudo cp libunp.a /usr/lib
sudo cp libunp.a /usr/lib64
修改 unp.h 并将其和 config.h 拷贝到 /usr/include 中
vim lib/unp.h //将 unp.h 中#include "../config.h"修改为#include "config.h"
sudo cp lib/unp.h /usr/include
sudo cp config.h /usr/include
编译书本例子。注意:编译时必须加上静态链接库:-l 参数加上 libunp.a 去掉lib和后面的.a。最后得到参数-lunp
cd ./intro
gcc daytimetcpcli.c -o daytimetcpcli -lunp
测试上面生成的可执行文件获取本机当前日期:
./daytimetcpcli 127.0.0.1
在进行测试时会出现以下错误:
connect error:Connection refused
其实这个是因为xinetd服务没有启动,如果没有安装,用管理员身份下载
(笔者的服务器是centos,命令为sudo yum install xinetd)
6.cd到/etc/xinetd.d下,然后分别修改daytime-dgram和daytime-stream中的disable为no。再依次执行service xinetd restart 以及systemctl restart xinetd
7.这个时候再去unpv13e文件下,cd到intro,依次执行make daytimetcpcli1和./daytimecpcli1 127.0.0.1,从而得到想要的结果。