已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
通信软件设计方法 杨雄 编写,二零零九年四月,1,讲授内容,1)LINUX概况 2)LINUX下C语言程序编译和调试 2.1)LINUX开发环境学习(实验) 3)通信系统和通信软件 4)基于TCP-IP的主机到主机通信软件示例 4.1)SOCKET程序设计(实验) 5)无状态通信协议程序设计 6)LINUX内核程序设计 7)低层232接口通信程序设计 8)设计一个简单链路层以及程序 8.1)IP软件和链路层软件设计(实验),2,第二讲 LINUX下C语言程序编译和调试,上讲回顾,开机 - 执行内存00000开始的程序 - 阅读bios配置并初始化 - 调光盘或硬盘0000道扇区的程序进入内存某个区域 - 执行这个程序 - 这个程序是操作系统的第一级引导程序 - 这个程序把LINUX中的boot装入内存 - 执行boot,装入LINUX内核 - 启动0号进程 - 0号根据系统配置表(类似注册表)进程生成后台进程 - 为每个终端启动getty进程,等待用户登陆 - getty为登陆用户启动shell进程,3,LINUX内核结构,内核主要部分是静态的,也有部分内核程序是动态调入的 称为动态模块 和进程的区别是不能被调度去取得CPU 而是等待进程来调用它(和静态内核一样),4,第二讲 LINUX下C语言程序编译和调试,shell的作用,等待终端用户输入命令 - 检查命令的语法合法性 - 到文件系统中找这个命令(可执行文件) - 调入这个命令(可执行文件) - 执行这个可执行文件(程序) - 执行完返回shell,内核,getty - shell - 命令字串 - 这个命令界面 - shell,内存管理,CPU调度,文件系统,硬盘管理,命令 程序,shell shell shell shell,5,本章重点问题,LINUX下如何编译C语言程序 vi的使用,6,LINUX操作系统,Hello! 李阳,第二讲 LINUX下C语言程序编译和调试,7,C语言代码(程序) int main (int argc, char *argv) if (argc 2) printf(“ERRORn”); exit(-1); printf(“nHello,%s!n”,argv1); exit(1); ,第二讲 LINUX下C语言程序编译和调试,示例程序2,8,本讲实验操作一,1、开机进入登陆画面 2、用root用户或你的用户登陆 3、man vi 4、man vi vi- 5、more vi-,9,LINUX操作界面 Shell及常用命令 vi gcc makefile,第二讲 LINUX下C语言程序编译和调试,10,Linux终端使用基础,什么是Shell?,11,shell的基本形式,shell的种类 : 查看shell种类: /bin/sh /bin/bash /bin/bash2 /bin/ash /bin/bsh /bin/tcsh /bin/csh ash: 贝尔实验室开发的shell,bsh是对ash的符号链接。 bash: GNU的Bourne Again shell,是GNU操作系统上默认的shell。sh以及bash2都是对它的符号链接。 tcsh: Berkeley UNIX C shell。csh是对它的符号链接。,12,shell的基本形式,shell 命令的基本格式是: #命令名 选项 shell提示符 : # $ man 命令,检查某个命令或函数的使用方法 $man mkdir,13,目录和文件的基本操作,文件查看和连接命令cat cat 选项 分屏显示命令more more 选项 按页显示命令less less 选项 ,14,复制、删除和移动命令,复制命令cp cp 选项 或者 cp 选项 . 删除命令rm rm 选项 . 移动或重命名命令mv mv 选项 或者 mv 选项 . ,15,创建和删除目录命令,创建目录命令mkdir mkdir -p 删除删除空目录命令rmdir rmdir -p ,16,切换工作目录和显示目录命令,切换工作目录命令cd cd 显示当前路径命令pwd pwd 查看目录命令ls ls 选项 .,17,查找与定位命令,查找文件或者目录命令find find path expression 文件定位命令locate/slocate locate 选项 ,18,链接ln ln 选项 改变文件或目录时间的命令touch touch 选项 file2 .,链接命令,19,压缩解压缩命令,命令格式为: tar 辅选项 查看文件内容:tar t(z)vf 文件名 压缩和解压命令gzip gzip 选项 解压命令unzip unzip 选项 ,普通文件,tar(tar.gz)文件,c(z)vf,x(z)vf,20,常用命令,显示文字命令echo echo -n 显示日历命令cal cal 选项 月 年 日期时间命令date 显示日期和时间的命令格式为: date 选项 +FormatString 设置日期和时间的命令格式为: date 清除屏幕命令clear,21,软件包管理命令rpm,安装软件 rpm -i ( 或者 -install) 安装选项 . 删除 rpm -e (或者-erase) 删除选项 pkg1 . pkgN 升级 rpm -U ( 或者-upgrade) 升级选项 file1.rpm . fileN.rpm 查询 rpm -q ( 或者 -query) 查询选项 pkg1 . pkgN 校验已安装的软件包 rpm -V ( 或者 -verify) 校验选项 pkg1 . pkgN,22,联机帮助命令,man info help command,23,LINUX操作界面 shell vi gcc makefile,第二讲 LINUX下C语言程序编译和调试,24,本讲实验操作二,1、cd ext-1 2、vi hello.c 3、学习vi的使用 1)命令模式使用的命令: dd 删除一行 p 拷贝刚才删除的一行 上下左右键 光标的移动 Del键 删除一个符号 ZZ i 进入插入/输入和编辑模式(Esc退出) : 进入末行命令模式,25,本讲实验操作二,4、学习vi的使用 2)插入模式使用的命令: 字母,数字,符号,回车等 上下左右键 光标的移动 Esc键 返回命令模式 3)末行命令模式使用的命令: w 写入文件,w! 强行写入文件 q 退出编辑,q! 强行退出vi,26,三种工作方式,27,进入与退出,进入vi的命令: vi vi 文件名 :标识空行,状态行,28,进入与退出,命令参数: n :进入vi后,光标停在文件的第n行; :.末行; /字符串 :.第一个指定字符串处; 退出vi命令: 命令状态: 两个大写的字母Z,即ZZ; 功能:存盘并退出; 末行模式: w :存盘不退出; w 文件名 :存在指定文件中,退出; w! 文件名 :覆盖保存在指定文件中,并退出。,29,进入与退出,末行模式 q :退出vi; q! ;退出不保存; wq :保存文件后,退出; x :同ZZ,退出vi,不保存; 进入插入模式的命令: i :在光标所在位置的前面插入; I :.行的开头插入; a : .的位置的后面插入; A: .行的后面插入; o : .行的下面新建一行插入; O : .行上面新建一行插入;,30,光标的移动,插入/命令模式下: 利用键盘上的方向键; 命令模式下: i、h、w、b、0、$、,31,文本编辑/删除命令,x:删除当前字符; d命令,32,其它命令,查找命令 ?:向文件头方向查找合适的文本; n :重复前一个查找命令; N :向文件尾方向.;,33,本讲实验操作三,1、cd ext-1 2、vi hello.c 3、gcc -o h hello.c 4、./h 5、vi makefile,编辑如下 h:hello.c gcc -o h hello.c 6、rm -r *.o h, 之后用ll 7、make 8、ll 9、./h LiYang,34,LINUX操作界面 shell vi gcc makefile,第二讲 LINUX下C语言程序编译和调试,35,GCC 命令行详解,1、gcc包含的c/c+编译器 gcc,cc,c+,g+,gcc和cc是一样的,c+和g+是一样的,一般c程序就用gcc编译,c+程序就用g+编译 2、gcc的基本用法 gcc test.c这样将编译出一个名为a.out的程序 gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名字 3、为什么会出现undefined reference to xxxxx错误? 首先这是链接错误,不是编译错误 有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译 数里指定程序要链接数学库,方法是在编译命令行里加入 -lm。,36,GCC 命令行详解,4、-l参数和-L参数 -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢? 就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。 我们自已要用到一个第三方提供的库名字叫libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)。,37,GCC 命令行详解,5、-include和-I参数 -include用来包含头文件,但一般情况下包含头文件都在源码里用#include xxxxxx实现,-include参数很少用。-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了,如果不加你会得到一个“xxxx.h: No such file or directory“的错误。-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。,38,GCC 命令行详解,6、-O参数 这是一个程序优化参数,一般用-O2就是,用来优化程序用的,比如gcc test.c -O2,优 化得到的程序比没优化的要小,执行速度可能也有所提高 7、-shared参数 编译动态库时要用到,比如 gcc -shared test.c -o libtest.so,39,GCC 命令行详解,8、几个相关的环境变量 PKG_CONFIG_PATH:用来指定pkg-config用到的pc文件的路径,默认是/usr/lib/pkgconfig,pc文件是文本文件,扩展名是.pc,里面定义开发包的安装路径,Libs参数和Cflags参数等等。 CC:用来指定c编译器。 CXX:用来指定cxx编译器。 LIBS:跟上面的-libs作用差不多。 CFLAGS:跟上面的-cflags作用差不多。 CC,CXX,LIBS,CFLAGS手动编译时一般用不上,在做configure时有时用到,一般情况下不用管。 环境变量设定方法:export ENV_NAME=xxxxxxxxxxxxxxxxx,40,GCC 命令行详解,9、关于交叉编译 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上,比如在我们的PC平台(X86 CPU)上编译出能运行在sparc CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到sparc CPU平台上才能运行。当然两个平台用的都是linux。 这种方法在异平台移植和嵌入式开发时用得非常普遍。 相对与交叉编译,我们平常做的编译就叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行。 用来编译这种程序的编译器就叫交叉编译器,相对来说,用来做本地编译的就叫本地编译器,一般用的都是gcc,但这种gcc跟本地的gcc编译器是不一样的,需要在编译gcc时用特定的configure参数才能得到支持交叉编译的gcc。 为了不跟本地编译器混淆,交叉编译器的名字一般都有前缀,比如sparc-xxxx-linux-gnu-gcc,sparc-xxxx-linux-gnu-g+ 等等,41,GCC 命令行详解,10、交叉编译器的使用方法 使用方法跟本地的gcc差不多,但有一点特殊的是:必须用-L和-I参数指定编译器用sparc系统的库和头文件,不能用本地(X86)的库(头文件有时可以用本地的)。 例子: sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib -I/path/to/sparcInclude,42,LINUX操作界面 shell vi gcc makefile,第二讲 LINUX下C语言程序编译和调试,43,MAKEFILE,1、make 大型程序维护工具 Makefile 或 makefile: 告诉make维护一个大型程序,该做什么。 Makefile说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,make按照这些说明自动地维护这些模块。 Netdefs.h 头文件 Subrs.c network.c 源文件 编译 Subrs.o network.o 目标文件 连接 Network 可执行文件,44,MAKEFILE,在makefile(Makefile)中, 自顶向下说明各模块之间的依赖关系及实现方法: network: network.o subrs.o (1) cc o network network.o subrs.o (2) network.o: network.c netdefs.h (3) cc c network.c (4) subrs.o: subrs.c netdefs.h (5) cc c subrs.c (6) 其中(3)(6)可以简化为:(隐含的规则) network.o subrs.o: netdefs.h #make #make network #make f makefile,45,MAKEFILE,2、makefile要点 宏(变量) CC=gcc $(CC) test.c $: current target $:first prerequisite $:all prerequisites 后缀规则(suffix rules),46,MAKEFILE,.c.o: $(CC) -c $(CFLAGS) -o $ $ %.o:%.c $(CC) -c $(CFLAGS) -o $ $,47,MAKEFILE,$,$,$代表的意义分别是: $-目标文件 $-所有的依赖文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共行政学概述
- 2026华发杯高尔夫球赛提案
- 12009中国零售业防损调查报告
- 模拟电子技术基础 2篇 4章1
- 27版53高中同步新教材生物必修1人教版练习册第6章专题强化练3 有丝分裂图像及相关图示分析
- 2026全球气候变化应对行业经济分析投资评估环保科技策略发展报告
- 2026中国物流行业商协会联盟及资源整合与协同效应报告
- 2026生物科技领域股权融资现状研判及战略布局策略研究报告
- 2026中国照明电器行业市场竞争态势分析及行业发展趋势预测研究
- 2027届河北省秦皇岛市抚宁区台营学区化学九上期中调研模拟试题含解析
- 2025年人教新课标高一地理上册月考试卷
- 高考化学复习:高中化学方程式
- 10J113-1内隔墙-轻质条板(一)
- 昆山市新初一分班语文试卷含答案
- 麻醉不良事件上报流程
- 全民健康养生餐饮连锁店项目策划书
- 超声引导下椎管内麻醉
- 建筑消防设施维护保养报告
- 皮类药材栽培技术-肉桂栽培(药用植物栽培技术课件)
- 高考日语基础归纳总结与练习(一轮复习)
- 2022年江苏苏州昆山市委老干部局招聘编外工作人员笔试备考题库及答案解析
评论
0/150
提交评论