配置UNP编程环境
Posted vennchan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置UNP编程环境相关的知识,希望对你有一定的参考价值。
今天开始学习Unix Network Programing这本书
第一步就是把UNP的编程环境搭建起来,试着跑通1.2的例程。
系统:Ubuntu 18.04
gcc版本:7.3
UNP的源码在此处下载:http://www.unpbook.com/src.html。
下载以后进行解压,阅读Readme,按步骤执行:
1、./configure # try to figure out all implementation differences
configure是一个脚本文件,主要作用是:Guess values for system-dependent variables and create Makefiles.这是为了保证源码的可移植性。
2、cd lib
make
生成静态链接库
3、libroute中的内容,仅当系统支持4.4BSD的时候需要,跳过。
4、libxti中的内容,仅当系统支持XTI的时候需要。我搜索了一下XTI,仅仅在Oracle的编程指南中找到了相关内容:
TLI 是在 1986 年随 AT&T System V Release 3 引入的。TLI 当时提供了一个传输层接口 API。ISO 传输服务定义提供了 TLI 所基于的模型。现在,TLI 提供了 OSI 传输层和会话层之间的 API。TLI 接口在 UNIX 的 AT&T System V Release 4 版本中得到了进一步发展,并在 SunOS 5.6 操作系统接口中也可用。
XTI 接口由 TLI 接口演变而来,代表该系列接口的未来方向。使用 XTI 接口与使用 TLI 接口的应用程序相兼容,因此无需立即将 TLI 应用程序移植到 XTI。新应用程序可以使用 XTI 接口,而且可以在必要时将较旧的应用程序移植到 XTI。
但是我解压出来的东西里没有xti文件夹,并且这个东西是面向SunOS的,于是作罢。
5、编译运行daytimetcpcli程序,也就是1.2的例程,访问127.0.0.0,运行结果是connection refused,应该是我自己的主机没有打开对应的端口。
访问206.168.112.96则长时间得不到响应,有可能是被墙了。
这个问题我留到读完书上相关内容再解决。
待续。。。。。。
因为我之前项目经历少,对makefile还不熟悉,所以在学习的过程中,我尝试阅读每一个makefile,既有助于我学习这本书,也有助于学习makefile。
lib目录下的makefile内容很简单:
include ../Make.defines
all: $LIB_OBJS
ar rv $LIBUNP_NAME $?
$RANLIB $LIBUNP_NAME
clean:
rm -f $PROGS $CLEANFILES
主要的参数都被定义在了根目录的Make.defines里面。
LIB_OBJS是所有依赖文件。
ar命令:用来创建、修改库。
-r:如果指定的文件已经存在于库中,则替换它。因为指定的文件在库中占据它们替换的文件的同一个位置,位置标志没有任何附加的影响。当和 -u 标志(更新)一起使用时,-r 标志仅替换自从最后一次添加到库中以后修改的文件。
-v: 将建立新库的详细的逐个文件的描述写至标准输出。当和 -t 标志一起使用时,它给出类似于 ls -l 命令给出的长列表。当和 -x 标志一起使用时,它在每个文件前加一个名称。当和 -h 标志一起使用,它列出成员名称和更新的修改时间。
RANLIB被定义为ranlib
ranlib:对静态库的符号索引表进行更新。但是百度得知,目前ar -s即可完成同样操作。
LIBUP_NAME就是生成的静态链接库的名字。
参考:https://www.cnblogs.com/edver/p/7217167.html
https://www.jianshu.com/p/a0037f327b96
https://www.cnblogs.com/machao/p/5288462.html
https://docs.oracle.com/cd/E38902_01/html/E38880/tli-51305.html#scrolltoc
以上是关于配置UNP编程环境的主要内容,如果未能解决你的问题,请参考以下文章