当前位置: 首页 > news >正文

UNIX网络编程 卷2 源代码使用

1. 下载源码,W. Richard Stevens的主页:http://www.kohala.com/start/
wget http://www.kohala.com/start/unpv22e/unpv22e.tar.gz -P /usr/local/src 
2. 解压
tar xvf /usr/local/src/unpv22e.tar.gz -C /root/bin 
3. 编译库文件
cd /root/bin/unpv22e/  
./configure 
编辑生成config.h文件,注释以下几行
vi config.h  
56 // #define uint8_t unsigned char  
57 // #define uint16_t unsigned short  
58 // #define uint32_t unsigned int  
添加MSG_R和MSG_W定义
vi config.h  
66 // add by jcq  
67 typedef unsigned long ulong_t;  
68 #define MSG_R 0400  
69 #define MSG_W 0200 
添加_GNU_SOURCE定义
vi config.h  
#define _GNU_SOURCE 
修改warpunix.c中的MKtemp函数,使用mkstemp函数替换mktemp函数
cd lib  
181 void  
182 Mktemp(char *template)  
183 {  
184 if (mkstemp(template) == NULL || template[0] == 0)  
185 err_quit("mktemp error");  
186 } 
编译生成libunpipc.a
cd lib  
make
 
将生成的libunpipc.a复制到/usr/lib中。
[root@localhost myunp2]# vim ftok.c
[root@localhost myunp2]# gcc -o ftok ftok.c 
/tmp/ccxRydhw.o: In function `main':
ftok.c:(.text+0x18): undefined reference to `err_quit'
ftok.c:(.text+0x30): undefined reference to `Stat'
ftok.c:(.text+0x48): undefined reference to `Ftok'
collect2: 错误:ld 返回 1
[root@localhost myunp2]# gcc -o ftok ftok.c -lunpipc
/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_open':
wrapunix.c:(.text+0x4d8): undefined reference to `mq_open'
wrapunix.c:(.text+0x4f0): undefined reference to `mq_open'
/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_close':
wrapunix.c:(.text+0x52b): undefined reference to `mq_close'
/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_unlink':
wrapunix.c:(.text+0x55b): undefined reference to `mq_unlink'
/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_send':
wrapunix.c:(.text+0x5a3): undefined reference to `mq_send'
/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_receive':
wrapunix.c:(.text+0x5e3): undefined reference to `mq_receive'
/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_notify':
wrapunix.c:(.text+0x623): undefined reference to `mq_notify'
/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_getattr':
wrapunix.c:(.text+0x653): undefined reference to `mq_getattr'
/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_setattr':
wrapunix.c:(.text+0x68b): undefined reference to `mq_setattr'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_open':
wrapunix.c:(.text+0x9c8): undefined reference to `sem_open'
wrapunix.c:(.text+0x9e0): undefined reference to `sem_open'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_close':
wrapunix.c:(.text+0xa1b): undefined reference to `sem_close'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_unlink':
wrapunix.c:(.text+0xa4b): undefined reference to `sem_unlink'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_init':
wrapunix.c:(.text+0xa8b): undefined reference to `sem_init'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_destroy':
wrapunix.c:(.text+0xabb): undefined reference to `sem_destroy'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_wait':
wrapunix.c:(.text+0xaeb): undefined reference to `sem_wait'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_trywait':
wrapunix.c:(.text+0xb1c): undefined reference to `sem_trywait'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_post':
wrapunix.c:(.text+0xb5b): undefined reference to `sem_post'
/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_getvalue':
wrapunix.c:(.text+0xb93): undefined reference to `sem_getvalue'
/usr/lib/libunpipc.a(wrapunix.o): In function `Shm_open':
wrapunix.c:(.text+0xccc): undefined reference to `shm_open'
/usr/lib/libunpipc.a(wrapunix.o): In function `Shm_unlink':
wrapunix.c:(.text+0xd0b): undefined reference to `shm_unlink'
collect2: 错误:ld 返回 1
[root@localhost myunp2]# gcc -lrt -o ftok ftok.c -lunpipc
[root@localhost myunp2]# man mq_open
Cannot open the message catalog "man" for locale "zh_CN.UTF-8"
(NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")

Formatting page, please wait...

出现上面的错误,使用gcc 加选项-lrt解决。

 

错误:

[root@localhost myunp2]# gcc -lrt -o slot slot.c -lunpipc
slot.c: 在函数‘main’中:
slot.c:8:22: 错误:‘IPC_PRIVATE’未声明(在此函数内第一次使用)
         msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT);
                      ^
slot.c:8:22: 附注:每个未声明的标识符在其出现的函数内只报告一次
In file included from slot.c:1:0:
unpipc.h:153:21: 错误:‘MSG_R’未声明(在此函数内第一次使用)
 #define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6)
                     ^
slot.c:8:34: 附注:in expansion of macro ‘SVMSG_MODE’
         msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT);
                                  ^
unpipc.h:153:29: 错误:‘MSG_W’未声明(在此函数内第一次使用)
 #define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6)
                             ^
slot.c:8:34: 附注:in expansion of macro ‘SVMSG_MODE’
         msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT);
                                  ^
slot.c:8:45: 错误:‘IPC_CREAT’未声明(在此函数内第一次使用)
         msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT);
                                             ^
slot.c:11:22: 错误:‘IPC_RMID’未声明(在此函数内第一次使用)
         Msgctl(msqid,IPC_RMID,NULL);

解决方法:

1.unpv22e里面的Make.defines 
修改 
#CFLAGS = -g -O2 -D_REENTRANT -Wall 
CFLAGS = -g -O2 -D_GNU_SOURCE -D__USE_GNU -D_REENTRANT -Wall 

2 将unpv22e中的unpipc.h拷贝到需要编译的代码的目录。

3 将config.h也拷贝到这个目录,由于unpipc.h依赖于这个头文件。

 

相关文章:

  • 使用getmac命令获取网卡对应的GUID
  • Skype for Business Server 2015-04-前端服务器-1-安装-先决条件
  • 近百本精品图书全部免费赠送——仅面向学生
  • SQL GROUP BY 语句
  • tomcat内存设置
  • Web系统页面打印技术实现与分析
  • Postfix maillog邮件发送各阶段延时的日志记录
  • 使用Json比用string返回数据更友好,也更面向对象一些
  • 利用try-catch判断变量是已声明未声明还是未赋值
  • NIST发布云计算参考体系结构
  • Winform基础
  • 《Visual C++ 2008入门经典》学习笔记(1)——数据类型
  • MySQL索引的三星评估(three-star system)
  • 配置 RAC 负载均衡与故障转移
  • 新界面新功能Firefox 4.0 RC重磅登场
  • 【css3】浏览器内核及其兼容性
  • 【刷算法】从上往下打印二叉树
  • 08.Android之View事件问题
  • 0基础学习移动端适配
  • co.js - 让异步代码同步化
  • CSS居中完全指南——构建CSS居中决策树
  • C语言笔记(第一章:C语言编程)
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Laravel 实践之路: 数据库迁移与数据填充
  • leetcode讲解--894. All Possible Full Binary Trees
  • Nodejs和JavaWeb协助开发
  • PHP CLI应用的调试原理
  • SwizzleMethod 黑魔法
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 猴子数据域名防封接口降低小说被封的风险
  • 普通函数和构造函数的区别
  • 前嗅ForeSpider教程:创建模板
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 设计模式走一遍---观察者模式
  • 详解移动APP与web APP的区别
  • 想写好前端,先练好内功
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 译有关态射的一切
  • 用Python写一份独特的元宵节祝福
  • ​马来语翻译中文去哪比较好?
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (175)FPGA门控时钟技术
  • (26)4.7 字符函数和字符串函数
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (动态规划)5. 最长回文子串 java解决
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (十三)Flask之特殊装饰器详解
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net web项目 调用webService
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?