unix 网路编程(卷一)第一个程序编译过程

Unix Network Programming——unp.h 在Unix网路编程第一卷第三版第一章的第一个例子中,包含了unp.h头文件。这个头文件并不在标准库中,你可以通过下载该书的附属代码来使用它。点击这里下载,你也可以在图灵社区中进行下载。 下载后需要进行编译,步骤如下: 1、解压 2、修改configure的权限,并执行再使用make进行编译chmod u+x configure ./configure make3、将生成的libunp.a文件复 阅读详情

unix卷一去年暑假买的到现在才开始看无比惭愧,而且惭愧第一个程序就断断续续弄了几天,要好好写程序了,马上要找工作了,下面介绍下把本书第一个程序跑起来的过程:

搜各种博客

我用系统的是ubuntu 13.04

感谢风无语大神的blog:传送门 以后也要坚持记录自己遇到的各种问题以及解决他们的方法,当我们新接触一个领域时,往往在入门问题上耽误了好多时间,我按照风无语大神的方法一切准备好后,还是有问题

kapop@kapop:~/cpp$ g++ a.cpp -o a -lunp
/tmp/cczLHmnw.o:在函数‘main’中:
a.cpp:(.text+0x30):对‘err_quit(char const*, ...)’未定义的引用
a.cpp:(.text+0x67):对‘err_sys(char const*, ...)’未定义的引用
a.cpp:(.text+0xd9):对‘err_quit(char const*, ...)’未定义的引用
a.cpp:(.text+0x108):对‘err_sys(char const*, ...)’未定义的引用
a.cpp:(.text+0x142):对‘err_sys(char const*, ...)’未定义的引用
a.cpp:(.text+0x181):对‘err_sys(char const*, ...)’未定义的引用
collect2: 错误: ld 返回 1
kapop@kapop:~/cpp$ g++ a.cpp unp.c -o a -lunp
kapop@kapop:~/cpp$ ./a 127.0.0.1
03 AUG 2013 15:53:32 CST


unp.c文件内容如下

#include	<errno.h>		/* for definition of errno */
#include	<stdarg.h>		/* ANSI C header file */
//#include	"ourhdr.h"
#include    "unp.h"

static void	err_doit(int, const char *, va_list);

char	*pname = NULL;		/* caller can set this from argv[0] */

/* Nonfatal error related to a system call.
 * Print a message and return. */

void
/* $f err_ret $ */
err_ret(const char *fmt, ...)
{
	va_list		ap;

	va_start(ap, fmt);
	err_doit(1, fmt, ap);
	va_end(ap);
	return;
}

/* Fatal error related to a system call.
 * Print a message and terminate. */

void
/* $f err_sys $ */
err_sys(const char *fmt, ...)
{
	va_list		ap;

	va_start(ap, fmt);
	err_doit(1, fmt, ap);
	va_end(ap);
	exit(1);
}

/* Fatal error related to a system call.
 * Print a message, dump core, and terminate. */

void
/* $f err_dump $ */
err_dump(const char *fmt, ...)
{
	va_list		ap;

	va_start(ap, fmt);
	err_doit(1, fmt, ap);
	va_end(ap);
	abort();		/* dump core and terminate */
	exit(1);		/* shouldn't get here */
}

/* Nonfatal error unrelated to a system call.
 * Print a message and return. */

void
/* $f err_msg $ */
err_msg(const char *fmt, ...)
{
	va_list		ap;

	va_start(ap, fmt);
	err_doit(0, fmt, ap);
	va_end(ap);
	return;
}

/* Fatal error unrelated to a system call.
 * Print a message and terminate. */

void
/* $f err_quit $ */
err_quit(const char *fmt, ...)
{
	va_list		ap;

	va_start(ap, fmt);
	err_doit(0, fmt, ap);
	va_end(ap);
	exit(1);
}

/* Print a message and return to caller.
 * Caller specifies "errnoflag". */

static void
err_doit(int errnoflag, const char *fmt, va_list ap)
{
	int		errno_save;
	char	buf[MAXLINE];

	errno_save = errno;		/* value caller might want printed */
	vsprintf(buf, fmt, ap);
	if (errnoflag)
		sprintf(buf+strlen(buf), ": %s", strerror(errno_save));
	strcat(buf, "\n");
	fflush(stdout);		/* in case stdout and stderr are the same */
	fputs(buf, stderr);
	fflush(stderr);		/* SunOS 4.1.* doesn't grok NULL argument */
	return;
}
a.cpp如下所示

#include "unp.h"
#include<iostream>
#include<algorithm>
#include<string>
#include<cstdlib>
using namespace std;
int main(int argc, char **argv){
	int sockfd, n;
	char recvline[MAXLINE + 1];
	struct sockaddr_in servaddr;
	if (argc != 2) {
//		cout << "ni mei can shu shao le!" << endl;
		err_quit("usage: a.out <IPaddress>");
	}
	if ( (sockfd = socket(AF_INET, SOCK_STREAM,0)) < 0) {
//		cout << "Fuck ing life ! " << endl;
			err_sys("socket error");
	}
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port =  htons(13);
	if (inet_pton(AF_INET,argv[1],&servaddr.sin_addr) <= 0) { 
		//cout << "inet_pton error for" <<endl;
		err_quit("inet_pton error for %s",argv[1]);
	}
	if (connect(sockfd,(SA *) &servaddr,sizeof(servaddr)) <0) {
		/*cout << "connect error"<< endl ;*/
		err_sys("connect error");
	}
	while( (n = read(sockfd, recvline, MAXLINE)) >0 ){
		recvline[n]=0;
	 if (fputs(recvline,stdout) == EOF) {
		//cout << "Fputs error" << endl ;	
			err_sys("fputss error");
		}
	}
	if (n < 0 ) {
	   //cout << "read error" <<endl;
		err_sys("read error");
	}
	exit(0);
	//return 0;
}
感谢互联网的共享精神,感谢记录问题并提供解决方法的大神,让我等*nix菜鸟取得进步。

VFH避障/局部路径规划算法 VFH避障/局部路径规划算法 本文章是我看《The Vector Field Histogram-Fast Obstacle Avoidance for Mobile Robots》论文时候的笔记,感兴趣的欢迎去看原论文。 VFH中有一些概念是从其他算法中借鉴过来的,并且VFH算法本身就是对VFF(Virtural Force Field)的一种改进,其中有很多的相似之处。所以按照原论文的思路,先介绍由CMU提出的Certainty Grid算法中的一些概念,再介绍一下势场法中的一些概念,接着介绍一下VFF 阅读详情

相关推荐

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南)

本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。

bush的博客 379

解决Unix环境高级编程示例中的 undefined reference to `err_quit'

在编译APUE书中的例子(Page 290, 程序清单11-1 打印线程ID)时,出现如题所述错误,使用的编译命令为     $gcc -o print_thread_id print_thread_id.c -lpthread #include "apue.h" #include pthread_t ntid; void printids(const char *s)

DavidYuxuan的专栏 6763

DELL Precision T7920加装显卡遇到的坑

文章目录DELL Precision T7920加装显卡服务器原有配置介绍选购过程确认型号确认PCIE x16插槽确认电源功率和电源线安装过程电源模组线不够多单装一个3090显卡尺寸问题加装上1080Ti非常重要!官方文档 DELL Precision T7920加装显卡 实验室由于显卡计算能力不够,以及显卡显存不够,请老师花了大价钱购入了两张GeForce 3090显卡。老师赛高!记录一下这次加装显卡过程中学到的一些知识。 服务器原有配置介绍 服务器原有一张1080Ti显卡,一个16核Xeon CPU。

weixin_45520982的博客 1万+

UNIX环境高级编程中的apue.h错误

最近在读 Richard Stevens 的大作《UNIX环境高级编程》,相信很多初读此书的人都会与我一样遇到这个问题,编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个文件或目录”。 apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编译时

peilw625311的专栏 909

BUCK降压斩波电路设计实战:从IGBT选型到续流二极管优化

本文详细解析了BUCK降压斩波电路的设计实战,从IGBT选型到续流二极管优化,涵盖了关键参数设计、调试技巧及电磁兼容问题解决方案。通过实际案例和数据对比,帮助工程师高效完成DC-DC转换电路设计,提升系统性能和可靠性。

weixin_29253711的博客 95

火山引擎大模型语音合成双向流式API实战:Python实现与优化指南

本文详细介绍了如何利用火山引擎大模型语音合成双向流式API,通过Python实现低延迟、实时的语音合成应用。文章从核心协议解析入手,提供了完整的Python客户端实现代码,并分享了连接复用、错误重试、与LLM流式输出集成等实战优化技巧,帮助开发者快速构建智能客服、实时语音助手等AI应用。

n8m7b6v5c4的博客 1219

apue.h头文件错误和error错误处理

参考网址 http://www.linuxidc.com/Linux/2013-01/77467.htm 注意点: 按要求解压到/root目录 tar -xzvf src.tar.gz -C /root 上面网址的第4点(将/root/apue.2e/ipp/printd.h中第977行中的status替换为Status。) 没有printd.h文件 是printd.c文件 按要求即可编程

master-dragon的专栏 3797

初识 QML

QML 是一种声明性语言,允许根据用户界面的可视组件以及它们如何相互交互和相互关联来描述用户界面。QML 是一种高度可读的语言,旨在使组件能够以动态方式互连,并且允许组件在用户界面中轻松重复使用和自定义。 使用 Qt Quick,开发人员可以轻松地在 QML 中构建流体动画用户界面,并且可以选择将这些用户界面连接到任何后端 C++ 库。

青春不老,奋斗不止! 1万+

关于err_sys未定义错误解决方法

err_sys以及err_quit等函数不是C语言自带函数,是作者自己编写的函数。所以,想要运行书中的源代码,就必须自建一个头文件my_err.h把作者的代码拷贝进去,然后在程序中加载,可以和apue.h放在一个路径下,然后在代码中加上#include "error.h"。 下面是error.h的内容。 #include errno.h> /* for defini

onlyou2030的博客 4926

开尔文四线法与电桥(uΩ电阻检测)

本文介绍了开尔文四线法与电桥在电阻测量中的应用,特别是针对uΩ级别电阻的精确检测。讨论了基本电桥电路的工作原理,强调了开尔文四线法的优势,它能消除导线和接触电阻的影响。文中还提到了测试设备的介绍,包括不同级别的电阻测试,并详细阐述了uΩ级别电阻测试的步骤和注意事项。此外,对比了惠斯通电桥与开尔文电桥,强调了它们在电阻测量中的作用和计算方法。

让你爱上电路设计 7866

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

gcc编译时对'xxxx'未定义的引用问题

在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行文件的时候会出现找不到’xxx’的定义的情况。 例如: g++ -o spider   -rdynamic -lpthread -levent -lcrypt -ldl bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o

huangbo1221的博客 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

unix 网路编程(卷一)第一个程序编译过程unix网络编程 第一个例子 connect error: Connection refused

这个问题我来回答,linux 现在因为安全问题,各个发行版本默认是不开daytime服务的。 第一个例子实际上是两个程序,客户端和服务端,你很有可能只运行了客户端,没有运行服务端程序。 服务端程序在书上第12页……你不会尚还没有看到那里吧? PS:由于要打开端口,所以服务端程序需要用root权限执行,所以你可以先 sudo ./daytimetcpsrv 然后再开一个终端运行 

kkk的专栏 6442

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Unix 网络编程 卷一 运行daytimetcpcli 出现Connection refused

系统:FreeBSD4.4Unix 网络编程 卷一源文件编译的问题解决完成后。运行 ./daytimetcpcli 127.0.0.1出现Connection refused.于是网上找开放13端口的时间获取服务器,结果没有找到,索性自己开放自己的13端口试试。运行netstat -an  没有发现13端口。从网上了解时间服务器在inetd中,百度百科显示inet如下:inetd是监视一些网络请求...

zhenyi2000的博客 1762

UNIX下c语言的图形编程

相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色,即他们能利用上下左右等方向键来控制游标的位置。 除此之外, 这些程式的画面也较为美观。 对 Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC 上用 Turbo C 轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误。其实, 原因很简单, 他

huabinbin110的专栏 1566

UNIX下C语言的图形编程curses.h函式库

UNIX下C语言的图形编程curses.h函式库相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色,即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对 Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC 上用 Turbo C 轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时,

ducduc的专栏 809

UNIX下c语言的图形编程--curses.h 函式库

<br /><br /> 相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色,即他们能利用上下左右等方向键来控制游标的位置。 除此之外, 这些程式的画面也较为美观。 对 Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC 上用 Turbo C 轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误。其实, 原因很简单, 他使用的函式库可能在 UNIX 上是没有定义的。 有些在 Turbo-C 上被广泛使用的

Programer From Scrach 1750

unix常用命令

a.   关於档案/目录处理的指令: 1. ls 这是最基本的档案指令。 ls 的意义为 "list",也就是将某一个目录或是 某一个档案的内容显示出来。 如果你在下 ls 指令後头没有跟著任何的档名,它将会显示出目前目录中所 有档案。 也可以在 ls 後面加上所要察看的目录名称或档案的名称,如 % ls /home2/X11R5 % ls f

turf's blog 1475

以下是UNIX linux 下c语言的图形编程  curses库

<br />UNIX下c语言的图形编程--curses.h 函式库<br /> 作者:不详  来源:supcode.com收集整理  发布时间:2005-7-22 19:39:36<br /> 减小字体 增大字体 <br /><br /> 相信您在网路上一定用过如  tin,elm 等工具, 这些软体有项共同的特色, <br />    即他们能利用上下左右等方向键来控制游标的位置.  除此之外, 这些程式 <br />    的画面也较为美观. 对 Programming 有兴趣的朋友

ssihc0的专栏 2808

UNIX网路编程(第三版) 关于源代码的使用问题

本人的系统为:ubuntukylin-14.04下载源代码:unpv13e.tar.gz解压:tar -zxvf unpv13e.tar.gz

zhutianyu_123的专栏 330

unix下图形编程

<br />相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, <br />即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式 <br />的画面也较为美观. 对 Programming 有兴趣的朋友一定对此感到好奇, 也 <br />许他能在 PC 上用 Turbo C 轻易地写出类似的程式, 然而, 但当他将相同 <br />的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. <br />其实, 原因很简单, 他使用的函式库可能在 UNIX

singlee_songzm的专栏 314
上一篇: 乱侃c++
下一篇: kmp&&hdu 1711 next数组
Java_beginer1
博客等级 码龄16年 22粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值