《UNIX网络编程 卷1》的源码可以从www.unpbook.com下载得到。解压之后的目录为unpv13e。

详细步骤

编译

  进入unpv13e目录,按如下步骤编译:

 ./configure 

 cd lib
make // 可能遇到问题:redefinition of ‘struct in_pktinfo’ cd ../libfree
make cd ../libroute
make //这一步可能会出错,可忽略,只是表示你的系统不支持 4.4BSD,并不影响对该书的学习 cd ../libgai
make

  针对上边的问题‘redefinition of ‘struct in_pktinfo’,我们需要将unpv13e/key/unp.h及unpv13e/sctp/unp.h中的“struct in_pktinfo”结构体声明注释掉,因为它已经被包含在标准头文件bits/in.h中了。修改之后需要重新编译 。

  以上步骤会生成一个静态库libunp.a。

将生成的libunp.a静态库复制到/usr/lib/和/usr/lib64/中

 cd ..   //回到 unpv13e 目录
sudo cp libunp.a /usr/lib
sudo cp libunp.a /usr/lib64

修改unpv13e/lib/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

运行示例(unpv13e/intro/daytimetcpcli.c)

  1)编译时必须加上静态链接库:-l 参数加上 libunp.a  去掉lib和后面的.a。最后得到参数-lunp

 cd ./intro
gcc daytimetcpcli.c -o daytimetcpcli -lunp

  2)测试上面生成的可执行文件获取本机当前日期:

 ./daytimetcpcli 127.0.0.1

  在进行测试时会出现以下错误:

 connect error:Connection refused

  3)该错误表示 daytime 服务程序没开,可通过  xinetd来实现对服务连接请求的控制。以下通过 xinetd 开启 daytime 服务程序。

 sudo cd /etc/xinetd.d/
sudo vim daytime

  如果xinetd.d文件夹是空的,则需要先安装xinetd服务:

 sudo yum install xinetd.x86_64

  将 daytime-stream 和 daytime-dgram 两个文件中的 disable = yes 修改成 disable = no,并保存退出,然后重启 xinetd:

 service xinetd restart

  4)再次测试该例子,能成功显示本机时间:

 ./daytimetcpcli 127.0.0.1
JUN :: CST

参考资料

  《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题

  Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)

  CentOS开启daytime服务器

《UNIX网络编程 卷1》之"学习环境搭建"(CentOS 7)的更多相关文章

  1. UNIX网络编程 卷2:进程间通信

    这篇是计算机类的优质预售推荐>>>><UNIX网络编程 卷2:进程间通信(第2版)> UNIX和网络专家W. Richard Stevens的传世之作 编辑推荐 两 ...

  2. [转载] 读《UNIX网络编程 卷1:套接字联网API》

    原文: http://cstdlib.com/tech/2014/10/09/read-unix-network-programming-1/ 文章写的很清楚, 适合初学者 最近看了<UNIX网 ...

  3. UNIX网络编程卷1 - >环境搭建(ubuntu16.04)

      学习unp网络编程,树上的例子均存在#include“unp.h”,故需要对环境进行配置. 1.到资源页下载www.unpbook.com 2.解压并将unpv13e移动到相应的文件夹下 (因为我 ...

  4. 【unp】unix网络编程卷1-->环境搭建(ubuntu14.04)

    学习unp网络编程,树上的例子均存在#include "unp.h",故需要对环境进行配置. 1. 到资源页下载unpv13e 2. 解压并将unpv13e 移动到相应的文件夹下 ...

  5. UNIX网络编程卷1 第一章 简介 读书笔记。

    基本没讲什么,一点点计算机网络发展史,一点点socket()简单介绍,最重要的是1.3节协议无关性. 协议无关性: 贯穿整本书的一个重要特性,他主要强调的是 socket是网络协议无关的编程接口. s ...

  6. 《Unix网络编程卷1:套接字联网API》读书笔记

    第一部分:简介和TCP/IP 第1章:简介 第2章:传输层:TCP.UDP和SCTP TCP:传输控制协议,复杂.可靠.面向连接协议 UDP:用户数据报协议,简单.不可靠.无连接协议 SCTP:流控制 ...

  7. 《UNIX网络编程 卷1:套接字联网API》读书笔记(一):网络编程简介

    概述 要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议.大多数网络是按照划分成客户和服务器来组织的.本章及后续章节的焦点是TCP/IP协议族,也可称为网际协议族.下图为客户与服务器 ...

  8. 第一篇:《UNIX 网络编程 第二版》编译环境的搭建

    第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 第三步:解压下载到的包并放在用户主目录中 第四步:进入包内并执行以下命令 su ...

  9. UNIX网络编程卷2进程间通信读书笔记(二)—管道 (1)

    一.管道 管道的名称很形象,它就像是一个水管,我们从一端到水然后水从令一端流出.不同的是这里说的管道的两边都是进程.从一端往管道里写数据,其它进程可以从管道的另一端的把数据读出,从而实现了进程间通信的 ...

随机推荐

  1. CentOS 7 下使用虚拟环境Virtualenv安装Tensorflow cpu版记录

    1.首先安装pip-install 在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误: No package python-pip available. Error ...

  2. python模块collections中namedtuple()的理解

    Python中存储系列数据,比较常见的数据类型有list,除此之外,还有tuple数据类型.相比与list,tuple中的元素不可修改,在映射中可以当键使用.tuple元组的item只能通过index ...

  3. 在android系统上写C语言程序--开机启动该程序不进入安卓系统

    今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的.如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直 ...

  4. (Java)微信之个人公众账号开发(一)——进入开发者模式

    本篇文章将教大家如何建立微信个人公众账号,(注意:后台全部是用javaweb相关技术开发),大家知道,现在微信公众账号分服务号和订阅号,现在我要讲的主要是个人微信公众账号的建立以及后台的开发,个人公众 ...

  5. 【BAT经典算法面试题系列】求和为n的连续正整数

    马上就要到9月份了,意味着一年一度的秋招就要开始了,相信不论是正在实习的童鞋还是马上就要找工作的童鞋,BAT无疑是国内的"明星企业",是每个学计算机的小伙伴们心之向往的企业,但是呢 ...

  6. Xcode7.3.1中SKAudioNode在Scene转换后无声的问题

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在新的Xcode中之前可以正常运行的SKAudioNode代码 ...

  7. Android fragment(片段)构建灵活的UI

    在以支持多种屏幕尺寸为目标设计应用时,您可以在不同的布局配置中重复使用您的fragment 从而根据可用的屏幕空间优化用户体验. 例如,在手机设备上,由于采用单窗格用户界面,因此可能更适合一次只显示一 ...

  8. Apache DbUtils 探秘

    听说Apache的DbUtils很好用,而且是对jdbc的简单的封装,所以可以和jdbc一起混搭,多以今天就来尝试一下,关于DbUtils 是如何使用的. 准备 数据库: MySQL 依赖: mysq ...

  9. Android使用HttpUrlConnection请求服务器发送数据详解

    HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式.最常用的Http请求无非是get和post,get请求可以获 ...

  10. cassandra 如何写数据以及放置副本

    application发送数据到server application 发送请求到server 根据设置的load balance 规则从cluster中挑选一个coordinator,一般使用轮询即可 ...