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依赖于这个头文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语言工程中有趣的事情

如果您阅读此博客,您将知道我坚信语言的力量。 因此,我当然有很大的偏见,但是我感觉语言工程社区正在增长,并且越来越有趣的东西正在涌现。 为此,我认为通过查看社区中正在发生的事情并列出一些我发现有趣的事情来结束…

操作 实例 / dom

响应式:数据改变时会触发其他联动。例如:模板中的数据绑定;计算属性的重新计算;———————————————————————————————————————————————————— vm.$parent $parent 属性可以用来从…

sql注入程序_Java应用程序中SQL注入

sql注入程序在本文中,我们将讨论什么是SQL注入攻击。 以及它如何影响任何Web应用程序使用后端数据库。 在这里,我专注于Java Web应用程序。 开放Web应用程序安全性项目(OWAP)列出了SQL注入是Web应用程序的主要漏洞攻击。 黑客将We…

C++设计模式-Prototype原型模式

作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C中通过拷贝构造函数实现。…

[SHOI2008]cactus仙人掌图

Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus)。所谓简单回路就是指在图上不重复经过任何一个顶点的回路。 举例来说,上面的第一…

java 导入导出txt文件_Java读取和写入txt文件

1 问题描述对于java的读取和写入txt一直心存疑惑,随着知识的积累,又重新进行学习,对java的文件读写理解更加深刻,在这里将自己的小小经验总结分享给大家。下面是大家了解java流的一个基本框架。2 问题分析在java中,jav…

[国家集训队] tree Ⅱ

bzoj2631(权限题。。。):链接 落咕:链接 考察的是LCT维护链上信息。 但是这个题不一样的是又有加法又有乘法。。。(有木有想到落咕的模板——线段树2qwq) 因为乘法的运算优先度比加法高,所以我们要先做乘法再做加法&am…

C++拷贝构造函数(深拷贝,浅拷贝)

对于普通类型的对象来说&#xff0c;它们之间的复制是很简单的&#xff0c;例如&#xff1a; int a88; int ba; 而类对象与普通对象不同&#xff0c;类对象内部结构一般较为复杂&#xff0c;存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostream>u…

java用for循环修改密码_Java for循环的几种用法分析

J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环&#xff0c;可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式&#xff0c;说明如何自行定义能被这样遍历的类&#xff0c;并解释和这一机制的一些常见问题。在Java程序中&…

apache camel_Apache Camel入门

apache camel在先前的博文中&#xff0c;我们了解了企业集成模式&#xff08;EIP&#xff09;。 现在&#xff0c;在这篇文章中&#xff0c;我们将研究实现这些模式的Apache Camel框架。 关于骆驼&#xff1a; Apache Camel是一个开放源代码项目&#xff0c;已有将近5年的历史…

C++拷贝构造函数详解

一. 什么是拷贝构造函数 首先对于普通类型的对象来说&#xff0c;它们之间的复制是很简单的&#xff0c;例如&#xff1a; [c-sharp] view plaincopyint a 100; int b a; 而类对象与普通对象不同&#xff0c;类对象内部结构一般较为复杂&#xff0c;存在各种成员变量。 …

mysql经典总结文章_MySQL基础篇(01):经典实用查询案例,总结整理

一、连接查询图解示意图1、建表语句部门和员工关系表&#xff1a;CREATE TABLE tb_dept (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键ID,deptName varchar(30) DEFAULT NULL COMMENT 部门名称,PRIMARY KEY (id)) ENGINEInnoDB AUTO_INCREMENT6 DEFAULT CHARSETutf8;CREAT…

针对故障场景的血液,汗液和书写自动集成测试

去年冬天&#xff0c;我为仍在工作的客户编写并发布了一项服务。 总体而言&#xff0c;该服务满足了业务需求和性能要求&#xff0c;但是使用该服务的一个团队告诉我&#xff0c;他们定期遇到一个问题&#xff0c;该问题是该服务将返回500个错误&#xff0c;并且在重新启动该服…

java 8 update 11_从Java 8升级到Java 11应该注意的问题

从 Java 8迁移到Java 11比大多数升级更棘手。以下是这个过程的一些注意事项。模块在Java 9中Java引入了历史上最大的变化之一 是模块&#xff0c;但&#xff1a;不必将你自己的代码模块化以后才能升级到Java 11。在大多数情况下&#xff0c;放在类路径classpath上的代码能继续在…

标签树的三种遍历

一、标签树的下行遍历 属性说明.contents子节点的列表&#xff0c;将<tag>所有儿子节点存入列表中&#xff08;只能获取下一级儿子节点&#xff09;.children子节点的迭代类型&#xff0c;与.contents类似&#xff0c;用于循环遍历儿子节点.descendants子孙节点的迭代类型…

Git 使用规范流程

团队开发中&#xff0c;遵循一个合理、清晰的Git使用流程&#xff0c;是非常重要的。 否则&#xff0c;每个人都提交一堆杂乱无章的commit&#xff0c;项目很快就会变得难以协调和维护。 下面是ThoughtBot 的Git使用规范流程。我从中学到了很多&#xff0c;推荐你也这样使用Git…

oracle安装静默

安装环境&#xff1a;centos71、修改主机名 /etc/sysconfig/network#HOSTNAMEoracledb.012、修改ip和对应的主机名 /etc/hosts#10.5.1.190 oracledb.013、关闭Selinux /etc/selinux/config#SELINUXdisabled4、参考官方文档安装依赖的软件包 binutils-2.23.52.0.1-12.el7.x86_64…

[MEGA DEAL] Ultimate Java开发和认证指南(59%折扣)

通过介绍世界上最受欢迎的编程语言之一掌握Java编程概念 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的《 Ultimate Java Development and Certification Guide 》 仅售20美元&#xff0c;而…

python浅拷贝的说法_Python中List的复制(直接复制、浅拷贝、深拷贝)

直接赋值&#xff1a;如果用 直接赋值&#xff0c;是非拷贝方法。这两个列表是等价的&#xff0c;修改其中任何一个列表都会影响到另一个列表。old [1,[1,2,3],3]new []for i in range(len(old)):new.append(old[i])new[0] 3new[1][0] 3-----------------------Before:[1,…

AliOS-Things Visual studio code helloworld 入门

配置环境的时候别忘了下载&#xff1a;GCC工具链&#xff1a;https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads AliOS Things 完成第一个应用&#xff1a;Hello World 全局掌控 从Git上下载源码用VSCode打开源码&#xff0c;查看源码的目录结构打开Hello…