通信软件设计方法-第二讲-LINUX下C语言程序.ppt

上传人:本田雅阁 文档编号:2124024 上传时间:2019-02-19 格式:PPT 页数:54 大小:653.51KB
返回 下载 相关 举报
通信软件设计方法-第二讲-LINUX下C语言程序.ppt_第1页
第1页 / 共54页
通信软件设计方法-第二讲-LINUX下C语言程序.ppt_第2页
第2页 / 共54页
通信软件设计方法-第二讲-LINUX下C语言程序.ppt_第3页
第3页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《通信软件设计方法-第二讲-LINUX下C语言程序.ppt》由会员分享,可在线阅读,更多相关《通信软件设计方法-第二讲-LINUX下C语言程序.ppt(54页珍藏版)》请在三一文库上搜索。

1、通信软件设计方法 杨雄 编写,二零零九年四月,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道扇区的程序进入内存某

2、个区域 - 执行这个程序 - 这个程序是操作系统的第一级引导程序 - 这个程序把LINUX中的boot装入内存 - 执行boot,装入LINUX内核 - 启动0号进程 - 0号根据系统配置表(类似注册表)进程生成后台进程 - 为每个终端启动getty进程,等待用户登陆 - getty为登陆用户启动shell进程,3,LINUX内核结构,内核主要部分是静态的,也有部分内核程序是动态调入的 称为动态模块 和进程的区别是不能被调度去取得CPU 而是等待进程来调用它(和静态内核一样),4,第二讲 LINUX下C语言程序编译和调试,shell的作用,等待终端用户输入命令 - 检查命令的语法合法性 - 到

3、文件系统中找这个命令(可执行文件) - 调入这个命令(可执行文件) - 执行这个可执行文件(程序) - 执行完返回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”

4、); 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

5、/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 选项 分

6、屏显示命令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 文件定位命令loca

7、te/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 设置日期和时间

8、的命令格式为: 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

9、 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,三

10、种工作方式,27,进入与退出,进入vi的命令: vi vi 文件名 :标识空行,状态行,28,进入与退出,命令参数: n :进入vi后,光标停在文件的第n行; :.末行; /字符串 :.第一个指定字符串处; 退出vi命令: 命令状态: 两个大写的字母Z,即ZZ; 功能:存盘并退出; 末行模式: w :存盘不退出; w 文件名 :存在指定文件中,退出; w! 文件名 :覆盖保存在指定文件中,并退出。,29,进入与退出,末行模式 q :退出vi; q! ;退出不保存; wq :保存文件后,退出; x :同ZZ,退出vi,不保存; 进入插入模式的命令: i :在光标所在位置的前面插入; I :.行的

11、开头插入; 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 hel

12、lo.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、为什么会出现undefi

13、ned reference to xxxxx错误? 首先这是链接错误,不是编译错误 有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译 数里指定程序要链接数学库,方法是在编译命令行里加入 -lm。,36,GCC 命令行详解,4、-l参数和-L参数 -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢? 就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。 我们自已要用到一个第三方提供的库名字叫libtest.so,那么我们只要把libtest.so拷贝到/us

14、r/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/myin

15、clude参数了,如果不加你会得到一个“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用

16、到的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、关于交叉编译 交叉编译通俗地讲就是在一种平台上编译出能运行

17、在体系结构不同的另一种平台上,比如在我们的PC平台(X86 CPU)上编译出能运行在sparc CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到sparc CPU平台上才能运行。当然两个平台用的都是linux。 这种方法在异平台移植和嵌入式开发时用得非常普遍。 相对与交叉编译,我们平常做的编译就叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行。 用来编译这种程序的编译器就叫交叉编译器,相对来说,用来做本地编译的就叫本地编译器,一般用的都是gcc,但这种gcc跟本地的gcc编译器是不一样的,需要在编译gcc时用特定的configure参数才能得到支持交

18、叉编译的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

19、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)中, 自顶向下说明各模块之间的依赖关系及实现方法:

20、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)

21、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,$,$,$代表的意义分别是: $-目标文件 $-所有的依赖文件 $-第一个依赖文件。 .c.o: 这个规则表示所有的 .o文件都是依赖与相应的.c文件的。,48,LINUX操作系统,Hello! 李阳,第二讲 LINUX下C语言程序编译和调试,49,

22、C语言代码(程序) int main (int argc, char *argv) if (argc 2) printf(“命令参数不正确n”); exit(-1); printf(“nHello,%s!n”,argv1); exit(1); ,第二讲 LINUX下C语言程序编译和调试,示例程序2,50,1、用你的用户名称登陆LINUX 2、cd 你的工作目录 3、vi c-h.c,编辑源程序(源代码),vi 是一个编辑软件,也是一个LINUX命令。 c-h.c 是一个文件名称,其内容就是你要编 辑的源代码。,vi 的操作的特别之处是存在3个状态: 插入状态、命令状态、行命令状态 插入状态下也可以用上下左右键来移动光标,第二讲 LINUX下C语言程序编译和调试,51,makefile 文件内容 c-h:c-h.o gcc -o c-h c-h.c,4、vi makefile,编辑makefile文件; 5、make 6、./c-h 李阳,c-h是可以执行的命令。,第二讲 LINUX下C语言程序编译和调试,52,本讲需要掌握的概念和方法,LINUX操作系统 1、vi命令如何使用? 2、gcc 命令如何使用? 3、makefile文件的作用是什么?和什么命令搭配? 4、shell是什么?起什么作用? 5、内核、进程、终端、shell、用户之间的关系什么?,53,第二讲 结 束,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1