开发者社区> 指尖的舞曲> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 1. 下载源码,W. Richard Stevens的主页:http://www.kohala.com/start/ wget http://www.kohala.com/start/unpv22e/unpv22e.
+关注继续查看
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依赖于这个头文件。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《Linux/UNIX OpenLDAP实战指南》——1.2 OpenLDAP目录架构
LDAP的目录信息是以树形结构进行存储的,在树根一般定义国家(c=CN)或者域名(dc=com),其次往往定义一个或多个组织(organization,o)或组织单元(organization unit,ou)。一个组织单元可以包含员工、设备信息(计算机/打印机等)相关信息。
2262 0
《Linux/UNIX OpenLDAP实战指南》——1.7 对象标识符讲解
schema定义了OpenLDAP框架目录所应遵循的结构和规则,保障整个目录树的完整性。主要包括4个部分,分别是OID、objectClass、匹配规则、属性,本小节主要介绍OID相关知识点。
1861 0
《Linux/UNIX OpenLDAP实战指南》——1.9 本章总结
本章介绍了OpenLDAP产品、功能及优点、适用场景,让读者慢慢对陌生而强大的自动化账号管理软件进行系统的了解。并针对OpenLDAP的组织架构、OpenLDAP关键术语(schema、objectClass、attribute、LDIF)及相关实现方式进行详细介绍。
1494 0
《Linux/UNIX OpenLDAP实战指南》——1.6 LDIF详解
LDIF(LDAP Data Interchanged Format)的轻量级目录访问协议数据交换格式的简称,是存储LDAP配置信息及目录内容的标准文本文件格式,之所以使用文本文件来存储这些信息是为了方便读取和修改,这也是其他大多数服务配置文件所采取的格式。
2478 0
经典文摘:Linux/Unix设计思想
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaobryant/article/details/38806823 Mike Gancarz是一位技术布道者。
746 0
+关注
指尖的舞曲
目前在阿里巴巴搬砖
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JAVA开发手册1.5.0
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载