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

  • unp.h的安装
    • 源代码编译
    • 静态库安装
  • 运行第一个程序
    • 启动daytime服务

unp.h的安装

源代码编译

  • 在书籍网站(http://www.unpbook.com/src.html)上下载本书源码
  • 解压到本地文件夹
    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的运行库已经编译成功。

静态库安装

  • .\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/libusr/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服务。

运行第一个程序

启动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
    

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

  1. caffe windows 学习第一步:编译和安装(vs2012+win 64)

    转载自:http://www.cnblogs.com/denny402/p/5041060.html 没有GPU,没有linux, 只好装caffe的windows版本了. 我的系统是win10(64 ...

  2. 【Java学习】JDK安装及第一个java程序

    一直听说Java是C++的升级和优化,却一直没用过,今天来简单学习一下. JDK安装及第一个java程序 一.JDK安装 二.第一个java程序 三.系统环境变量配置 一.JDK安装 JDK(Java ...

  3. 2020车载凯立德懒人包下载_华为HarmonyOS App开发工具DevEco Studio下载安装及第一个HarmonyOS App实战教程...

    2020年9月10日,华为开发者大会发布了鸿蒙(HarmonyOS)2.0.HarmonyOS是一套全场景操作系统.从理论上讲,HarmonyOS可以在任何平台上运行(包括但不限于PC.手机.平板电脑 ...

  4. 【操作系统】HarmonyOS App开发工具HUAWEI DevEco Studio下载安装及第一个HarmonyOS App实战教程

    路标 DevEco Studio简介 DevEco Studio的下载安装 安装过程演示 开发第一个基于Java的TV App 微信公众号原文链接:点击查看 2020年9月10日,华为开发者大会发布了 ...

  5. 华为HarmonyOS App开发工具DevEco Studio下载安装及第一个HarmonyOS App实战教程

    路标 DevEco Studio简介 DevEco Studio的下载安装 安装过程演示 开发第一个基于Java的TV App 微信公众号原文链接:点击查看 2020年9月10日,华为开发者大会发布了 ...

  6. Anaconda安装及第一个py程序

    Conda安装及第一个py程序 安装Conda 下载安装 在Anaconda官网下载Anaconda 打开Conda安装程序 设置好安装目录(这个一定要记好,后边要用),比如我的目录就是 D:\Pro ...

  7. 问题解决“Windows Installer 程序包有问题,此安装需要的程序不能运行。请与您的支持人员或程序包开发商联系”

    安装或者卸载软件时出现如下提示:Windows Installer 程序包有问题,此安装需要的程序不能运行.请与您的支持人员或程序包开发商联系 解决方法: 1.按Win+R打开运行,输入service ...

  8. python安装包_迈出Python学习第一步:Python开发环境的下载与安装

    所谓"磨刀不误砍柴工"."工欲善其事,必先利其器",都在告诉我们一个道理:要做好一个事情,事先做好充分的准备工作是非常重要的.所以在我们正式学习用Python编 ...

  9. 深度学习第一步(anaconda、pytorch安装)

    不讲太多序言,做个无趣的男孩子,上来就上干货 第一步:anaconda安装 1.首先下载anaconda 官网咱们就不说了,下载慢,还容易出问题 直接上国内好资源,在清华镜像源下载安装包 anacon ...

最新文章

  1. 从1.5k到18k, 一个程序员的5年成长之路(分享)
  2. SAP UI5 应用开发教程之五十四 - 如何将本地 SAP UI5 应用配置到本地 Fiori Launchpad 中的试读版
  3. pta通讯录排序用python实现,python实现将android手机通讯录vcf文件转化为csv
  4. “科学学”视角下的科研工作者行为研究
  5. (49)FPGA线性单驱动(wire型)
  6. 微信亿级用户异常检测框架的设计与实践
  7. JS面向对象,__proto__和prototype详解
  8. 混响运行于CPU或者DSP时的部分指标对比
  9. 润乾报表开源 BI 组件学习
  10. GitLab之创建项目组及项目
  11. 打印日历程序php,C++实现的一个打印日历程序
  12. mysql查询并计算单价_数据库实验:统计查询和组合查询图书(书号,书名,作者编号,价格,出版社编号) 作者(编号,姓名,电话)出版社(编号,出版...
  13. 彩信文件服务器,彩信服务器怎么设置
  14. Java知识点(三)
  15. IDEA 闪退,并在C盘生成文件java_error_in_idea_****.log
  16. 程序设计基础—什么是逻辑与、或、非关系?
  17. c++系统骨干研发进阶的道和术
  18. tampermonkey自动化学习(持续更新~)
  19. 20个专业H5(HTML5)动画工具推荐
  20. 【无标题】ssh登陆 提示 session ended very soon

热门文章

  1. 【有利可图网】PS教程:PS制作气泡黑板效果
  2. python数圈算法_Python实现随机爬山算法
  3. 李宗吾和王阳明:居中就是一种心法
  4. 3dmax模型复制卡,为什么?
  5. 浅谈棋牌游戏开发框架之架构
  6. PDF迅捷转换器html网址,如何把PDF转换成HTML?迅捷PDF转换器
  7. 一文掌握Python+tkinter键盘事件与鼠标事件处理
  8. vnc远程桌面,六款好用又免费的vnc远程桌面软件
  9. 使用AutoCAD创建管道并导出PCF文件
  10. web常用通用组件+Axure后台管理系统框架模板+大屏数据可视化元件库+智慧社区管理系统大屏+图表组件+表单组合+智慧数据看板+通用大屏图表原件库+电脑端常用组件