通信软件设计方法-第二讲-LINUX下C语言程序_第1页
通信软件设计方法-第二讲-LINUX下C语言程序_第2页
通信软件设计方法-第二讲-LINUX下C语言程序_第3页
通信软件设计方法-第二讲-LINUX下C语言程序_第4页
通信软件设计方法-第二讲-LINUX下C语言程序_第5页
已阅读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调度,文件系统,硬盘管理,命令程序,shellshellshellshell,5,本章重点问题,LINUX下如何编译C语言程序vi的使用,6,LINUX操作系统,Hello!李阳,第二讲LINUX下C语言程序编译和调试,7,C语言代码(程序)intmain(intargc,char*argv)if(argcvi-5、morevi-,9,LINUX操作界面Shell及常用命令vigccmakefile,第二讲LINUX下C语言程序编译和调试,10,Linux终端使用基础,什么是Shell?,11,shell的基本形式,shell的种类:查看shell种类:/bin/sh/bin/bash/bin/bash2/bin/ash/bin/bsh/bin/tcsh/bin/cshash:贝尔实验室开发的shell,bsh是对ash的符号链接。bash:GNU的BourneAgainshell,是GNU操作系统上默认的shell。sh以及bash2都是对它的符号链接。tcsh:BerkeleyUNIXCshell。csh是对它的符号链接。,12,shell的基本形式,shell命令的基本格式是:#命令名选项shell提示符:#$man命令,检查某个命令或函数的使用方法$manmkdir,13,目录和文件的基本操作,文件查看和连接命令catcat选项分屏显示命令moremore选项按页显示命令lessless选项,14,复制、删除和移动命令,复制命令cpcp选项或者cp选项.删除命令rmrm选项.移动或重命名命令mvmv选项或者mv选项.,15,创建和删除目录命令,创建目录命令mkdirmkdir-p删除删除空目录命令rmdirrmdir-p,16,切换工作目录和显示目录命令,切换工作目录命令cdcd显示当前路径命令pwdpwd查看目录命令lsls选项.,17,查找与定位命令,查找文件或者目录命令findfindpathexpression文件定位命令locate/slocatelocate选项,18,链接lnln选项改变文件或目录时间的命令touchtouch选项file2.,链接命令,19,压缩解压缩命令,命令格式为:tar辅选项查看文件内容:tart(z)vf文件名压缩和解压命令gzipgzip选项解压命令unzipunzip选项,普通文件,tar(tar.gz)文件,c(z)vf,x(z)vf,20,常用命令,显示文字命令echoecho-n显示日历命令calcal选项月年日期时间命令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,联机帮助命令,maninfohelpcommand,23,LINUX操作界面shellvigccmakefile,第二讲LINUX下C语言程序编译和调试,24,本讲实验操作二,1、cdext-12、vihello.c3、学习vi的使用1)命令模式使用的命令:dd删除一行p拷贝刚才删除的一行上下左右键光标的移动Del键删除一个符号ZZi进入插入/输入和编辑模式(Esc退出):进入末行命令模式,25,本讲实验操作二,4、学习vi的使用2)插入模式使用的命令:字母,数字,符号,回车等上下左右键光标的移动Esc键返回命令模式3)末行命令模式使用的命令:w写入文件,w!强行写入文件q退出编辑,q!强行退出vi,26,三种工作方式,27,进入与退出,进入vi的命令:vivi文件名:标识空行,状态行,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、cdext-12、vihello.c3、gcc-ohhello.c4、./h5、vimakefile,编辑如下h:hello.cgcc-ohhello.c6、rm-r*.oh,之后用ll7、make8、ll9、./hLiYang,34,LINUX操作界面shellvigccmakefile,第二讲LINUX下C语言程序编译和调试,35,GCC命令行详解,1、gcc包含的c/c+编译器gcc,cc,c+,g+,gcc和cc是一样的,c+和g+是一样的,一般c程序就用gcc编译,c+程序就用g+编译2、gcc的基本用法gcctest.c这样将编译出一个名为a.out的程序gcctest.c-otest这样将编译出一个名为test的程序,-o参数用来指定生成程序的名字3、为什么会出现undefinedreferencetoxxxxx错误?首先这是链接错误,不是编译错误有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译数里指定程序要链接数学库,方法是在编译命令行里加入-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用来包含头文件,但一般情况下包含头文件都在源码里用#includexxxxxx实现,-include参数很少用。-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了,如果不加你会得到一个xxxx.h:Nosuchfileordirectory的错误。-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。,38,GCC命令行详解,6、-O参数这是一个程序优化参数,一般用-O2就是,用来优化程序用的,比如gcctest.c-O2,优化得到的程序比没优化的要小,执行速度可能也有所提高7、-shared参数编译动态库时要用到,比如gcc-sharedtest.c-olibtest.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时有时用到,一般情况下不用管。环境变量设定方法:exportENV_NAME=xxxxxxxxxxxxxxxxx,40,GCC命令行详解,9、关于交叉编译交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上,比如在我们的PC平台(X86CPU)上编译出能运行在sparcCPU平台上的程序,编译得到的程序在X86CPU平台上是不能运行的,必须放到sparcCPU平台上才能运行。当然两个平台用的都是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-gcctest.c-L/path/to/sparcLib-I/path/to/sparcInclude,42,LINUX操作界面shellvigccmakefile,第二讲LINUX下C语言程序编译和调试,43,MAKEFILE,1、make大型程序维护工具Makefile或makefile:告诉make维护一个大型程序,该做什么。Makefile说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,make按照这些说明自动地维护这些模块。Netdefs.h头文件Setwork.c源文件编译Subrs.onetwork.o目标文件连接Network可执行文件,44,MAKEFILE,在makefile(Makefile)中,自顶向下说明各模块之间的依赖关系及实现方法:network:network.osubrs.o(1)cconetworknetwork.osubrs.o(2)network.o:etdefs.h(3)cccnetwork.c(4)subrs.o:etdefs.h(5)cccsubrs.c(6)其中(3)(6)可以简化为:(隐含的规则)network.osubrs.o:netdefs.h#make#makenetwork#makefmakefile,45,MAKEFILE,2、makefile要点宏(变量)CC=gcc$(CC)test.c$:currenttarget$:firstprerequisite$:allprerequisites后缀规则(suffixrules),46,MAKEFILE,.c.o:$(CC)-c$(CFLAGS)-o$%.o:%.c$(CC)-c$(CFLAGS)-o$,47,MAKEFILE,$,$,$代表的意义分别是:$-目标文件$-所有的依赖文件$-第一个依赖文件。.c.o:这个规则表示所有的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论