您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > unix下c&C++软件开发(1)
HSS培训中心苑永超2010年8月10日UNIX下C&C++软件开发Lesson1讲师简介苑永超金融、电信大型项目经验。擅长项目管理、系统分析、架构设计。精通UNIX操作系统、C/C++开发。熟悉网络、通讯等。信产部项目管理师信产部系统分析师PMP第一次课•Unix一般介绍•Unix下C&C++开发工具•Unix文件系统•IO及文件操作第二次课•进程与环境•进程控制•进程关系•进程间IPC第三次课•信号•线程与线程控制•其他专题课程安排课堂要求请遵守培训纪律听课笔记互动练习UNIXisbasicallyasimpleoperatingsystem,butyouhavetobeageniustounderstandthesimplicity.回顾历史——人物回顾历史——历程在linux之前,unix主要有三个主流产品:At&Tunix,BSD(目前发展成著名的FreeBSD),SystemV还有其他一些unix产品:AIX(IBM的unix)---------主要是用在IBM的R6000系列小型机上Solars(SUN的unix)--------主用于SUN服务器,有X86的版本SCOunix/Unixware(SCO公司)--------主要用于PCServerVAX(DEC公司)----------曾经很辉煌,目前用的不多回顾历史——UNIX&C?1969年最早的unix版本是用汇编写的1972年,Ritchie开发了——C语言(基于Thompson的B语言)1973年用C语言重写了unix结论:Unix和C彼此成就了对方Unix和windows的对比对比项目unixwindows优势领域服务器桌面(小型组织服务器)多用户支持能力强(比WIN强4倍)一般开放性好(linux/freebsd)都开源专有系统安全性好,可支持文件级一般(可到目录级)用户友好性面向开发者面向最终操作用户稳定性(可靠性)强一般做UNIX开发的程序员为什么这么贵?0100002000030000400005000060000700008000090000100000GNU/LinuxSolarisMicrosoftWindowsMacOSX系列1软件开发的分类是否当前热门学科基础培养周期第一部分UNIX一般介绍一般介绍开发工具文件系统IO和文件Unix体系结构Unix启动过程字符界面登录流程和用户相关的文件㈠/etc/passwd中例子:ddl:x:1007:1000::/home/ddl:/bin/csh㈡/etc/group中:例子:mdsp:A/19a0w93AhwY:1000:hsl,sdm,zyy,mdmc,portal,submit,mdcc_qcb,mdcc_hl㈢/etc/skel目录下的文件bash_history.fonts.muttrc.xim.templatepublic_html.bashrc.gnu-emacs.profile.xinitrc.template.dvipsrc.inputrc.urlview.xtalkrc.emacs.kermrc.xcoralrcDocuments.exrc.mozilla.xemacsbinShell是什么?交互式的命令解释器一般分为:bashkshcsh三者有什么区别呢?第二部分unix下C&C++开发工具一般介绍开发工具文件系统IO和文件远程登录为什么要远程登陆?•UNIX系统一般安装在服务器上,供多个用户使用。不能直接使用主控终端/显示器,需要远程登录操作•telnet虚拟终端、串口终端、网络终端远程登陆工具•TeraTermPro:•可以设置登录界面属性(背景色/字体等);•可以记录交互IO信息日志,方便检索•NetTerm:•支持终端类型多;•支持架设简单的ftp服务器;•Secureshell:•linux下常用与用ssh连接到服务器•Xmanager•远程图形终端程序的编辑目前unix较少提供集成开发环境IDE编辑unix源程序的四种选择•(1)传统的编辑使用vi或vim•特点:要记一堆命令,分编辑模式和命令模式•(2)可以选用图形界面下的编辑器•(3)在windows下编译使用ftp远程传输过去•(4)使用ultraEdit的file下ftp远程编辑文件功能建议•如果想长时间在unix下玩,就把vi好好掌握以下,方便!•如果你参加团队开发,使用(3),注意保持和配置库一致•如果你想简单地玩玩,用ultraEdit吧程序的编译(1)编译器名称•Unix默认的c编译器为cc,c++的一般为CC•注意:这不是绝对的,有些cc也支持C++编译•另外,不同的UNIX系统还有自己的编译器名称•如AIX一般称为xlc和xlC•另外,你也可以安装开源的gcc编译器(2)编译器路径•一般的unix系统都有自带的编译器,一般安装在/usr/bin或/bin下,•可在PATH路径里设置。•可在shell命令行下输入cc,来确认是否存在编译器,•可用:whichcc来确定编译器所在目录(3)用法•CC-o可执行程序源码1源码2…-I头文件目录–L库文件目录最简单的调试•在程序中输出信息或打印日志•一般应用都提供了日志定位方式Linux下符号调试工具gdbUnix下符号调试工具dbx•例子其他检测工具•purify,可查看和定位内存泄露程序的调试Make及makefileMake工作原理•1、读入makefile的所有语句。•2、读入被include的其它Makefile。•3、初始化文件中的变量。•4、推导隐晦规则,并分析所有规则。•5、为所有的目标文件创建依赖关系链。•6、根据依赖关系,决定哪些目标要重新生成。•7、执行生成命令。makefile注意事项•1、Makefile在发展•2、有些makefile解释器(make)功能强,有些则弱,考虑到移植性,要选通用的。•3、例子中的都选用被广泛支持的标准•4、目前有自动生成工具帮助生成makefile,大家可以学习了解什么是Make?Make就是依据一套规则(缺省的或者由用户指定的),从源程序推导出目标程序的过程。Make用法为什么使用make•可以明晰模块之间的依赖关系,适合大规模工程•减少编译时间•减少手工出错的可能性Makefile如何编写•方法1:书写所有规则(mk1)•方法2:利用后缀规则(mk2)•方法3:利用隐含规则(mk3mk4)示例的依赖关系展示第三部分UNIX文件系统介绍一般介绍开发工具文件系统IO和文件EXT2文件系统组成引导块(bootblock)•引导块包含该文件系统的引导程序超级块(superblock)•超级块包含空闲索引节点表和空闲数据块表;索引节点表(inodelist)•索引节点用来存储文件相关信息及存储位置;数据块(datablocks)•数据块是磁盘上存放数据的文件系统组成文件描述符数目:0-2560:STDIN1:STDOUT2:STDERR用户文件描述符表fd全局文件表第四部分IO和文件操作一般介绍开发工具文件系统IO和文件常用的文件系统调用intopen(constchar*pathname,intflags);intopen(constchar*pathname,intflags,mode_tmode);ssize_tread(intfd,void*buf,size_tcount);ssize_twrite(intfd,constvoid*buf,size_tcount);intclose(intfd);intcreat(constchar*pathname,mode_tmode);off_tlseek(intfildes,off_toffset,intwhence);不太常用的文件系统调用intstat(constchar*file_name,structstat*buf);intlink(constchar*oldpath,constchar*newpath);intunlink(constchar*pathname);intaccess(constchar*pathname,intmode);intmknod(constchar*pathname,mode_tmode,dev_tdev);intchmod(constchar*path,mode_tmode);intchown(constchar*path,uid_towner,gid_tgroup);intutime(constchar*filename,structutimbuf*buf);intfcntl(intfd,intcmd);intfcntl(intfd,intcmd,longarg);文件操作1、列出文件属性•My_stat.c2、显示文本文件内容•my_cat.c2、输出回显•My_echo.c目录系统调用1、建立和删除目录•intmkdir(constchar*pathname,mode_tmode);•intrmdir(constchar*pathname);2、读写目录•DIR*opendir(constchar*pathname);•structdirent*readdir(DIR*dp);•voidrewinddir(DIR*dp);•intclosedir(DIR*dp);3、变更、获取目录•intchdir(constchar*pathname);•char*getcwd(char*buf,size_tsize);目录操作1、列当前目录•My_ls.c2、递归查找子目录•My_find.c标准流1、什么是流(stream)2、使用标准I/O库的好处3、stdin、stdout、stderr4、缓存(全缓存、行缓存、不带缓存)标准流(stdio.h)1、打开文件•FILE*fopen(constchar*pathname,constchar*type);•FILE*freopen(constchar*pathname,constchar*type,FILE*fp);•FILE*fdopen(intfiledes,constchar*type);2、每次读一个字符•intgetc(FILE*fp);•intfgetc(FILE*fp);•intgetchar(void);3、每次写一个字符•intputc(intc,FILE*fp);•intfputc(intc,FILE*fp);•intputchar(intc);4、判断文件是否出错或结束•intferror(FILE*fp);•intfeof(FILE*fp);5、读取一行•char*fgets(char*buf,intn,FILE*fp);•char*gets(char*buf);6、写入一行•intfputs(constchar*str,FILE*fp);•intputs(constchar*str);7、读写二进制的数据快•size_tfread(void*ptr,size_tsize,size_tnobj,FILE*fp);•size_tfwrite(constvoid*ptr,size_tsize,size_tnobj,FILE*fp);标准流(stdio.h)8、定位流•longftell(FILE*fp);•intfseek(FILE*fp,longoffset,intwhence);•voidrewind(FILE*fp);•intfgetpos(FILE*fp,fpos_t*pos);•intfsetpos(FILE*fp,constfpos_t*pos);9、格式化输出•intprintf(constchar*format,...);•intfprintf(FILE*fp,constchar*format,...);•intsprintf(char*buf,constchar*format,...);•intvprintf(constchar*format,va_listarg);•intvfprintf(FILE*fp,
本文标题:unix下c&C++软件开发(1)
链接地址:https://www.777doc.com/doc-3955246 .html