版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LINUX高级用户教程3月第1页LINUX高级用户教程主要章节LINUX概况LINUX开发环境LINUX进程环境和空间管理LINUX进程管理LINUX下信号LINUX下计时第2页LINUX用户教程主要章节文件操作网络编程LINUX进程间通信系统配置和管理第3页LINUX概述LINUX历史、现实状况和未来LINUX主要特点LINUX遵照一些标准怎样取得LINUX在线帮助LINUX经常问到一些问题
第4页LINUX开发环境LINUX下C编译器GNUMake程序中库函数和头文件编程格调LINUX下目标代码格式和相关命令第5页LINUX进程环境和空间管理LINUX进程环境用户环境变量用户程序空间布局用户动态空间分配空间分配相关接口
第6页LINUX进程管理Fork()ExecWaitExit第7页LINUX下信号信号起源和种类进程对信号响应LINUX下信号定义信号发送信号安装信号集合和集合操作信号编程注意事项实例第8页LINUX计时LINUX中时间Shell计时方法
第9页文件操作文件类型文件属性和操作目录操作符号链接和IO操作系统调用接口文件流操作IO相关库接口
第10页网络编程套接口网络分层协议网络通信模型LINUX下惯用网络通信接口网络通信实例
第11页进程间通信进程通信类型基于管道通信和FIFO通信消息队列信号量共享内存
第12页系统管理(一)系统安装GRUB开启引导器,开启过程和系统服务开启状态和服务配置用户和组管理进程管理软件包管理第13页系统管理(二)网络配置文件系统设置LINUX下各种设置使用远程登陆FTP、NFS配置Samba安全设置
第14页第一章LINUX概况第15页为何选择LINUX
——软件模式 当今软件按照其提供方式和是否赢利能够划分为三种模式,即:商业模式(commercialsoftware)、共享模式
(shareware)和自由软件(freeware或freesoftware)。商业软件由开发者出售拷贝并提供软件技术服务,用户只有使用权,但不能进行非法拷贝、扩散和修改;共享软件由开发者提供软件试用程序拷贝授权,用户在使用该程序拷贝一段时间之后,必须向开发者缴纳使用费,开发者则提供对应升级和技术服务;自由软件则由开发者提供软件全部源代码,任何用户都有权使用、拷贝、扩散和修改这些软件,同时有义务将自己修改过程序代码公开。
第16页自由软件两层含义
能够无偿提供给任何用户使用;它源码公开和能够自由修改。所谓能够自由修改指用户能够对公开源码进行修改,以使自由软件愈加完善,还能够对自由软件进行修改基础上开发上层软件。
第17页自由软件诞生UNIX从二十世纪七十年代诞生发展到八十年代,已经形成了多个分支(插图),
Unix在商业上面问题让许多对于Unix喜好者感到相当忧心,其中一个就是有名RichardM.Stallman先生,他认为:Unix是一个相当好操作系统,在这个系统上,大家能够将自己所学贡献出来,那么这个系统将会愈加优异。让自己发展良好软件让大家来使用就是最大高兴,而且因为每个人工作环境(指软硬件平台)可能都不太相同,有了OpenSource概念,大家都能够分享这一份心得!你程序将有很多人能够帮忙检验,将使得Unix社群更佳茁壮。于是为了理想,Stallman在1984年创建了GNU(GNU是“GNU'sNotUNIX”缩写)与
自由软件基金会(FreeSoftwareFoundation,FSF),并创作了许多『自由软件』供大众来使用。其作品以自由(free)GNUGPL授权模式提供。第18页自由软件带来好处free软件给使用者节约了相当一笔费用;Internet普及,使人们很轻易下载开放源代码软件,很轻易把开发、改进新结果上网交流。使软件开发由过去集中在专门机构里进行变为分散在网络上由许许多多独立开发者协作完成。它能够调动更多人主动性,发挥更多人创造性,而且受到更多人实践检验,因而能够更加快地完成和完善。这种方法不但比传统方式开发软件更为稳固,而且能够取得更多支持和更加快更新。LINUX一句名言:“BUG就像影子一样,只会出现在阳光照不到角落中”
第19页什么是LINUXLINUX是一个操作系统,同时它是一个自由软件,是free、源代码开放,设计它目标是建立不受任何商品化软件版权制约、全世界都能自由使用UNIX兼容操作系统产品。经典Linux发行版包含Linux内核,但还包含许多应用程序和工具。总说来,Linux发行版中出现许多系统级和用户级工具都来自自由软件基金会(FreeSoftwareFoundation)GNU项目。Linux内核和GNU工具套件都在GNU通用公共许可证(GNUGeneralPublicLicense,GNUGPL)下发行。
第20页为何使用LINUXLINUX是一套含有UNIX全部功效free操作系统,用户能够无偿得到它及源码并取得大量应用,而且能够任意修改和补充他们,对于用户学习、了解UNIX操作系统内核非常有益。LINUX是当前唯一能够无偿取得、为PC机及其它平台上多个用户提供多任务、多进程功效操作系统,这是人们要使用它主要原因。LINUX让我们从许可证限制中解脱出来,而使用含有许可证商业软件就意味着时时刻刻都得对许可证许多条例负责。Linux有非常广泛平台适应性。它在基于Intel企业x86(也包含AMD、Cyrix、IDT)计算机、基于Alpha计算机,以及苹果、Sun、SGI等企业计算机上都有对应公布版本,甚至在AS/400这么机器上都能找到对应版本。Linux还能够在许多PDA和掌上电脑以及嵌入式设备上运行。
已经有非常多应用程序能够在Linux上运行,大多数为SCOUnix开发应用程序都能在Linux上运行(借助于iBCS软件包),甚至还比在SCOUnix上运行速度更加快。LINUX之所以大受欢迎,不但仅因为它是无偿,更主要是linux含有极其丰富功效,LINUX操作系统不但能够用于服务器,其桌面环境也相当不错。第21页LINUX历史在80年代末,以intel主导x86系统架构个人计算机大行其道!但在此时,人们使用大多还是需要吃很多系统资源DOS系列或其它操作系统。芬兰郝尔辛基大学(Helsinki)LinusTorvalds
学生做了件不寻常事情!Linus手边有个Minix
系统
,他对这个操作系统有相当兴趣!开始了把Unix操作系统移植到个人计算机(X86架构)尝试基于
Stallman
提倡OpenSource,经过有心读取Unix关键,而且去除较为繁复关键程序,将他改写成能够适合用于普通个人计算机x86系统上面,到了1991
年,他终于将
0.02
版hobby放到网络上面供大家下载,而且因为hobby受到大家必定,相当多朋友一起投入这个工作中!终于到了
1994
年将第一个完整关键
Version1.0
公布!——LINUX一个主要里程碑第22页LINUX历史(续)因为Linuxkernel发展是由『虚拟团体』所达成,大家都是透过网络取得Linux关键原始码,经由自己精心改造后再回传给Linux社群,进而一步一步发展完成完整Linux系统,至于Torvalds先生是这个集团中发起者。因为这个群策群力缘故,Torvalds先生将Linux定为一样造福大家GNU授权模式!企鹅起源:
1994年发表Linux正式关键1.0时候,大家要LinusTorvalds想一只吉祥物,怪怪Torvalds突然想到小时候去动物园被一只企鹅追着满地打滚~还被咬了一口!既然想不到其它吉祥物了,干脆就以这支企鹅来当吉祥物算了!所以,当前我们经常看到这一只企鹅就是这么来!
第23页LINUX发展现实状况和趋势
诞生了十多年LINUX应用越来越广泛,从桌面到服务器,从操作系统到嵌入式系统,从零碎应用到整个产业形成。因为WINDOW影响,人们对LINUX使用还普遍比较生疏,间接影响LINUX发展,伴随LINUX应用范围扩大,LINUX热正在形成,范围在不停扩大,并逐步走出了学校、研究机构,向普及化方向发展;在LINUX应用开发、嵌入式系统开发两大发展方向上,不论国际、国内都急需要大量专业人才。Linux将会朝着完善功效、提升效率方向发展,包含允许用户创建线程、增加实时处理功效、开发适合多处理机体系结构版本;LINUX桌面系统正在形成,并逐步会在一些领域取代WINDOW系统; 今后操作系统只有:WINDOW、UNIX和LINUX???
第24页LINUX系统特点(一)开放性:是指系统遵照世界标准规范,尤其是遵照开放系统互连(OSI)国际标准。凡是遵照国际标准所开发硬件和软件,都功效彼此加入,可方便实现互连。另外,源码是开放和free,使得LINUX取得非常方便,而且节约费用。用户能够依据自己需要对部件进行混合搭配,建立自定义扩展。多用户:是指系统资源能够被不一样用户各自拥有使用,即每个用户对自己资源(文件、网络、空间)有特定权限,互不影响。多任务:系统能够同时执行多个程序,而且各个程序运行相互独立。LINUX系统调度每一个进程平等地访问处理器。出众速度性能:LINUX能够理想运行数月、多年而无须重新开启,与NT相比,该特点尤其突出。LINUX不大在意CPU速度,它能够把处理器性能发挥到极限,用户会发觉:影响系统性能提升限制原因主要是系统总线和IO性能。第25页LINUX系统特点(二)良好用户界面:LINUX向用户提供了三种界面:用户命令界面,系统调用界面和图形用户界面。
丰富网络功效:LINUX是在Internet基础上产生并发展起来,所以,完善内置网络是Linux一大特点。Linux在通信和网络功效方面优于其它操作系统
可靠系统安全:LINUX采取了许多安全技术办法,包含对读写进行权限控制、带保护子系统、审计跟踪、关键授权等,为网络多用户环境提供了必要安全保障。
良好可移植性:LINUX是一个可移植操作系统,能够从微型计算机到大型计算机任何环境和任何平台下运行。可移植性为运行LINUX不一样计算机平台与其它任何机器进行有效通信提供了伎俩,不需要增加特殊和昂贵通信接口。含有标准兼容性:LINUX是一个与POSIX(PortableOperatingSystemInterface)相兼容操作系统,它所组成子系统支持全部相关ANSI、ISO、IETF和W3C业界标准。第26页LINUX系统组成
LINUX普通有四个部分组成:内核、Shell、文件系统和应用程序。内核、Shell和文件系统组成了基本操作系统结构。它们使得用户能够运行程序,管理文件并使用系统。
LINUX内核:内核是系统“心脏”,是运行程序和管理像磁盘和打印机等硬件设备关键程序。Linux内核主要由存放管理、进程管理、设备管理、进程间通信等几部分组成。
LINUXShell:Shell是系统用户界面,提供了用户与内核进行交互操作一个接口。
LINUX文件系统:文件系统是存放在磁盘等存放设备上组织方法,LINUX文件系统实际上也是内核一个主要部分。LINUX支持当前流行各种文件系统,如:EXT2、EXT3、FAT、VFAT、IISO9660、NFS、JFS、XFS、SMB等。LINUX应用程序:标准LINUX系统都有一套称为应用程序程序集合,包含文本编辑器、编程语言、XWindow、办公套件、Internet工具、数据库等。
第27页LINUX内核版本
内核版本是Linus领导下开发小组发出系统内核版本号。内核版本有三个数字:r.x.yr:当前公布Kernel主版本号x:Kernel次版本号,偶数:稳定版本;奇数:开发中版本y:错误修补次数对于初学者,相关内核要记住最主要事是:带奇数内核版本(即2.3、2.5、2.7等)是试验性开发版内核。稳定发行版内核版本号是偶数(即2.4、2.6、2.8等)。当前LINUX内核最新版本为2.6,03年底公布。
第28页LINUX发行版本
发行版本是一些组织和厂家将LINUX系统内核与应用软件和文档包装起来,并提供一些安装界面和系统管理工具一个软件包集合。其中,Linux发行版中出现许多系统级别和用户级别工具都来自自由软件基金会(FreeSoftwareFoundation)GNU项目。当前LINUX发行版本已经有300余种,而且还在不停增加。相对于内核版本,发行套件版本号伴随公布者不一样而不一样,与系统级内核版本号是相对独立。第29页国际著名一些LINUX发行版本
RedHat—最著名Linux服务提供商,Intel、Dell等大企业都对其有较大投资,该企业前很快收购了开放源代码工具供给商Cygnus企业。SlackWare—历史比较悠久,有一定用户基础。SUSE—在欧洲著名度较大。
TurboLinux—在亚洲,尤其是日本用户较多。该企业在中国推出了TurboLinux4.0、4.02和6.0汉字版,汉化做得很出众。Debain—完全由计算机兴趣者和Linux小区计算机高手维护Linux公布版本。第30页国内著名一些LINUX发行版本
Linux进入中国后,在我国计算机界引发了强烈反响,最近两年,也出现了许多汉化Linux公布版本,影响较大有以下几个:XteamLinux—北京冲浪平台企业推出产品,中国第一套汉化Linux公布版本。BluePoint—1999年底正式推出产品,内核汉化技术颇受瞩目。RedflagLinux—中国科学院软件研究所和北大方正推出Linux公布版本。第31页LINUX支持标准LINUX符合POSIX1003.1标准
,POSIX1003.1标准定义了一个最小Unix操作系统接口,任何操作系统只有符合这一标准,才有可能运
行Unix程序。为了使UnixSystemV和BSD上程序能直接在Linux上运行,Linux还增加了部分SystemV和BSD系统接口,使Linux成为一个完善Unix程序开发系统。
第32页LINUX遵照标准说明POSIX:该标准最初由IEEE(电气和电子工程师协会)开发标准族,部分已经被ISO接收为国际标准。POSIX.1和POSIX.2
分别定义了POSIX兼容操作系统C语言系统接口
以及shell和工具标准。这两个标准是通常提到主要标准。SVID:SystemV接口描述。SystemV接口描述(SVID)是描述AT&T;UnixSystemV操作系统文档,是对POSIX标准扩展超集。
XPG:X/Open可移植性指南。X/Open可移植性指南(由X/OpenCompany,Ltd.出版),是比POSIX更为普通标准。X/Open拥有Unix版权,而XPG则指定成为Unix操作系统必须满足要求。第33页LSB(LinuxStandardsBase)
Linux标准基础LSB推出背景
因为LINUX发行商众多,为了防止不一样发行商对程序兼容性等问题带来影响,由四家领袖级Linux提供商发起了成立了LINUX协会工程UnitedLinux。致力于提供改进公共代码库,提供特定于Linux工业规范和认证计划,Linux标准基础(LinuxStandardsBase,LSB)规范意在消除各Linux分发版之间许多区分,其目标是让软件厂商更轻易地制作能够在许多企业不一样版本开源软件操作系统上运行程序,支持Linux应用程序市场。第34页LSB细则LSB认证是由FreeStandardsGroup提供独立于Linux版本发行商第三方认证,确保产品符合面向Linux发行套件及支持Linux应用程序业界标准规格。LSB认证内容包含公共规格(gLSB)和特殊架构规格(archLSB)认证,其中gLSB定义了那些基于LSB程序在运行过程各模块间标准接口,archLSB定义了基于不一样架构处理器(CPU)标准接口LSB内容主要覆盖文件系统设计,二进制格式(包含可执行和共享库),系统命令,scripts等内容。而POSIX标准和LSB标准之间有不少交融地方。FSG提供文档以及测试工具、一致性测试等都是无偿。第35页LSB带来好处促进Linux平台标准化,使得Linux工业标准早日形成,防止Linux陷入互不兼容泥沼,重蹈Unix阵营分裂覆辙。意在促进Linux国际化Li18nux等业已形成标准遵照。降低个别企业软件开发成本,节约资源以防止无须要重覆浪费,使得对Linux开发企业有一个可靠营利模式,同时兼顾Linux可自由传布特征
第36页LSB现实状况开源软件支持者自由标准组织(FreeStandardsGroup)于
年7月发表LSB
1.0测试版,于04年1月,向大众公布了其LSB2.0版Linux开发指南
LSB(2.0)功效支持PPC64、AMD64、IA64、PPC32、S390和S390X等许多处理器架构。已经制作LSB认证Linux产品软件开发商包含RedHat、Turbolinux、
SuSELinux、MandrakeSoft、Conectiva、Laboratory、SunWahLinux、ThizLinux和Progeny等。
第37页LINUX在线文档 man,即manunal,是
LINUX
系统手册电子版本。依据习惯,系统手册通常分为不一样部分(或小节,即section),每个小节阐述不一样系统内容。当前小节划分以下:1.
命令:普通用户命令2.
系统调用:内核接口3.
函数库调用:普通函数库中函数4.
特殊文件:/dev目录中特殊文件5.
文件格式和约定:/etc/passwd等文件格式6.
游戏程序命令。7.
杂项和约定:标准文件系统布局、手册页结构等杂项内容8.
系统管理命令。9.
内核例程:非标准手册小节。便于Linux内核开发而包含。
手册页普通保留在/usr/share/man目录下,其中每个子目录(如man1,man2,...,manl,mann)包含不一样手册小节
第38页man命令man命令行:man[-acdfFhkKtwW][-msystem][-pstring][-Cconfig_file][-Mpath][-Ppager][-Ssection_list][section]name
-M路径
,指定搜索man手册页路径,通常这个路径由环境变量MANPATH预设,假如在命令行上指定另外路径,则覆盖MANPATH设定。
-P命令
,指定所使用分页程序。-a显示全部手册页,而不是只显示第一个。
-d这个选项主要在检验时使用,假如用户加入了一个新文件,就能够用这个选项检验是否犯错,这个选项并不会列出文件内容。
-f只显示出命令功效而不显示其中详细说明文件。
-pstring设定运行预先处理程序次序,共有以下几项:
eeqnttbl,ggraprrefer,ppicvvgrind
-w不显示手册页,只显示文档文件所在位置。
第39页info Linux中大多数软件开发工具都是来自自由软件基金会GNU项目,这些工具软件件在线文档都以info文件形式存在。info程序是GNU超文本帮助系统。
info文档普通保留在/usr/info目录下,使用info命令查看info文档。要运行info,能够在shell提醒符后输入info,也能够在GNUemacs中键入Esc-x后跟info。
info帮助系统初始屏幕显示了一个主题目录,你能够将光标移动到带有*主题菜单上面,然后按回车键进入该主题,也能够键入m,后跟主题菜单名称而进入该主题。比如,你能够键入m,然后再键入gcc而进进入gcc主题中。 详细子命令省略第40页HOWTO 可供用户参考联机文档另一个形式是HOWTO文件,这些文件位于系统/usr/doc/HOWTO目录下。HOWTO文件文件名都有一个-HOWTO后缀,而且都是文本文件或html格式。 每一个HOWTO文件包含Linux某首先信息,比如它支持硬件或怎样建立一个引导盘,关于glibc、gcc、Java、SMB等。
要想查看这些文件,进入/usr/doc/HOWTO目录,使用more命令,详细形式以下:$cd/usr/doc/HOWTO;moretopic-name-HOWTO 另外,HOWTO文档还有其它格式文件,比如:HTML和PS等,保留在/usr/doc/HOWTO/other-formats下。
第41页LINUX惯用辅助在线命令help命令用于查看全部Shell命令。用户能够经过该命令寻求Shell命令使用方法,只需在所查找命令后输入help命令,就能够看到所查命令内容了。如:$helptestWhereis这个程序主要功效是寻找一个命令目标码、源码和文档所在位置。比如,我们最惯用ls命令,它是在/bin这个目录下。假如希望知道某个命令存在哪一个目录下,能够用whereis命令来查询,主要参数:
b只查找二进制文件
m查找主要文件
s查找起源 u查找不惯用统计文件
如:$whereisls执行后输出:ls:/bin/ls/usr/share/man/man1/ls.1.gzapropos搜索联机文档中与匹配字符相关条目。
第42页LINUXFAQUNIX和Linux有什么不一样?
为何Linux很主要?
我能用Linux做什么?
怎样开始学习Linux?
怎样在应用开发中使用Linux?
Linux上能够使用哪些编程语言?
LINUX适应性
。。。。。。第43页LINUX不足
Linux从出现到现今只经历了短短十年时间,但其发展速度是惊人,这与它开放性和优良性能是密不可分。不过我们应该看到,作为一个由学生开发系统,Linux还有许多先天不足,它设计思想过多地受到传统操作系统约束,没有表达出当今操作系统发展时尚,详细表现在以下几个方面:
不是一个微内核操作系统;
不是一个分布式操作系统;
不是一个安全操作系统
没有用户线程;
不支持实时处理;代码是用C而不是C++这么当代程序设计语言编写
尽管Linux有这么和那样不足,但其发展潜力不容低估,其发展动力就是遍布全球、为数众多Linux热心者,今后Linux将会朝着愈加完善功效化方向发展。或许,正是因为上面不足才使得LINUX发展没有受到更多束缚。
第44页LINUX应用前景
Linux开放性和灵活性使它得以在试验室和其它研究机构中被用于创新性技术变革前沿,Linux健壮和开放灵活性意味着它在今后很多年都将处于开发战线最前沿。高性能计算领域美国ASCI(加速战略计算创新)计划中多台机器采取Linux操作系统年11月16日公布TOP500中前十名机器中第五、六名分别采取了LINUX操作系统,其处理器数量到达2816和2304。国内机群系统几乎都采取LINUX操作系统服务器领域桌面系统嵌入式系统
安全平台第45页LINUX应用
——网上两条新闻IBM首席信息官BobGreenberg撰写《按需计算计划初步》内部备忘录,由IBM企业一名员工泄露了出来。在备忘录中,能够看出IBM有意到底转向Linux桌面系统,新OpenDesktop很有可能是完全取代Windows一套全新桌面工作环境中国RedFlagSoftware和日本MiracleLinux企业携手合作,目标是开发一个公共Linux平台,方便让亚洲企业轻松投入开放源代码阵营。
第46页LINUX在中国应用
——中国Linux标准呼之欲出四份规范草案已完成
Linux国家标准工作组当前已经完成对Linux应用编程界面(API)规范、Linux桌面操作系统技术规范、Linux服务器操作系统技术规范、Linux用户界面等四个方面规范草案编写,并进入社会征求意见征求阶段。 Linux国家标准工作组已经申请了863计划Linux、Office关键技术标准项目,该项工作从Linux标准体系研究着手,重点开启了汉字特征,桌面系统技术,服务器系统技术,用户图形界面环境研究等工作。第47页GNU通用公共许可证
——(GNUGeneralPublicLicense,GNUGPL)
UNIX发展带来问题Unix正式诞生:1973年Ritchie等人以C语言写出第一个正式Unix关键
主要Unix分支:1977年BSD诞生
百家齐鸣Unix版本GPL诞生Stallman在1984年创建了GNU与
自由软件基金会他创作了许多自由软件供大众来使用,对于其作品以自由(free)GNUGeneralPublicLicense(GPL)授权模式提供大众使用 FSF关键观念是:版权制度是促进社会进步伎俩,版权本身不是自然权力第48页GNU主要规则
Stallman先生对自由度下了这么直接说明:你能够依据任何你想要目标来运行这个Free程序;你能够在了解了这支个Free程序运作之后,将他修改成你所想要样式与功效;
你能够将你自己修改过Free程序再次发表,以帮助你朋友们;
你能够将这支Free程序进行改良,并将改良过程序公开发表,以造福社群。
简单来说,GPL授权含有几个特点:
任何软件挂上GPL授权之后,即为自由软件,任何人均可取得,同时,亦可取得其原始码(SourceCode);取得GPL授权之软件后,任何人均可进行修改原始码,以符合自己喜好;
除此之外,经过修改SourceCode应回报给网络社会,提供大家来参考!
第49页怎样了解GPL大多数软件许可证都被用来剥夺您享受和改变它自由,但和它们不一样,GNU通用公共许可证是用来确保您分享和改变无偿软件权利——确保软件对全部用户都是无偿。这个通用公共许可证,适合用于无偿软件联盟大部分软件和其它经过作者允许使用程序(有些其它无偿软件联盟软件由GNU库通用公共许可证所包含)。这里说到无偿软件,指是自由,而不是价格,设计通用公共许可证目标是为了确保您有发行无偿软件拷贝权利。确保当您需要时能得到源代码,确保您能够改变软件或在其它新无偿程序中使用其中部分。尽管GNU通用公共许可证要求将修改过代码公布给使用该代码客户,但它不要求将全部修改后代码都公布给公众(这是一些自由软件批评者没有领会关键一点)。确实,GNUGPL只要求使用代码客户能够取得修改后代码。用户自行设计代码,如:发行版本中一些内容,不属于此列。第50页本章小结本章从介绍自由软件三种模式开始,引入了自由软件典范LINUX起源,分析了LINUX发展现实状况和未来趋势。介绍了LINUX系统特点和组成,LINUX内核版本和发行版本差异,及LINUX遵照主要标准及LSB认证。LINUX在线文档学习是一个主要基础性知识最终经过对GNUGPL通用许可证一些知识能够加深我们对LINUX了解和支持。第51页第二章LINUX用户程序环境
第52页Linux下C语言编程
Linux发行版中包含了很多软件开发工具.它们中很多是用于C和C++应用程序开发.
什么是CC是一个在UNIX操作系统早期就被广泛使用通用编程语言.它最早是由贝尔试验室DennisRitchie为了UNIX辅助开发而写.
C在编程领域里得到广泛支持原因它是一个非常通用语言.几乎你所能想到任何一个计算机上都有最少一个能用C编译器.而且它语法和函数库在不一样平台上都是统一,
这个特征对开发者来说很有吸引力.用C写程序执行速度很快.C是全部版本UNIX上系统语言.第53页ANSIC标准ANSIC:这一标准是ANSI(美国国家标准局)于1989年制订C语言标准,确保了未来在不一样平台上C一致性.。
以后被ISO(国际标准化组织)接收为标准,所以也称为ISOC。ANSIC目标是为各种操作系统上C程序提供可移植性确保,而不但仅限于UNIX。
该标准不但定义了C编程语言语发和语义,而且还定义了一个标准库。这个库能够依据
头文件划分为15个部分,其中包含:字符类型(<ctype.h>)、错误码(<errno.h>)、
浮点常数(<float.h>)、数学常数(<math.h>)、标准定义(<stddef.h>)、
标准I/O(<stdio.h>)、工具函数(<stdlib.h>)、字符串操作(<string.h>)、
时间和日期(<time.h>)、可变参数表(<stdarg.h>)、信号(<signal.h>)、
非局部跳转(<setjmp.h>)、当地信息(<local.h>)、程序断言(<assert.h>)等等。
第54页GCC介绍Linux上可用C编译器是GNUC编译器,它建立在自由软件基金会编程许可证基础上,所以能够自由公布.你能在Linux发行光盘上找到它.GCC是GNUC和C++编译器。实际上,GCC能够编译三种语言:C、C++和ObjectC(C语言一个面向对象扩展)。利用gcc命令可同时编译并连接C和C++源程序。
第55页使用GCCgcc命令基本使用方法以下:
gcc[options][filenames]GCC惯用选项-c
选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接步骤.这个选项使用非常频繁因为它使得编译多个C程序时速度更加快而且更易于管理.缺省时GCC建立目标代码文件有一个
.o
扩展名.-S选项告诉GCC在为C代码产生了汇编语言文件后停顿编译.GCC产生汇编语言文件缺省扩展名是.s.-E选项指示编译器仅对输入文件进行预处理.当这个选项被使用时,预处理器输出被送到标准输出而不是储存在文件里.-v选项指示编译时列出编译过程每个阶段,如:预处理、汇编器、连接器,并列出每个阶段命令执行时详细信息。
第56页GCC优化选项
当你用GCC编译C代码时,它会试着用最少时间完成编译而且使编译后代码易于调试.易于调试意味着编译后代码与源代码有一样执行次序,编译后代码没有经过优化.有很多项选择项可用于告诉GCC在花费更多编译时间和牺牲易调试性基础上产生更小更加快可执行文件.这些选项中最经典是-O
和
-O2
选项.
-O0不优化-O/O1选项告诉GCC对源代码进行基本优化,主要是循环优化和跳转优化,普通该选项为缺省值.这些优化在大多数情况下都会使程序执行更加快.-O2选项告诉GCC产生尽可能小和尽可能快代码.-O2选项将使编译速度比使用-O时慢.但通常产生代码执行速度会更加快.主要优化策略包含:公共子表示式删除,运算强度弱化(strengthreduce),窥孔优化以及指令调度-O3选项除了进行O2相关优化外,还进行内联优化和存放器重命名优化还有一些优化选项在O3中也没有,比如,循环展开、数据预取、以及指令投机调度等,这些优化就要加专门优化选项才行。第57页调试和剖析选项
GCC支持数种调试和剖析选项.在这些选项里你会最惯用到是
-g
和
-pg选项.-g选项告诉GCC产生能被GNU调试器使用调试信息方便调试你程序.GCC提供了一个很多其它C编译器里没有特征,在GCC里你能使-g和-O(产生优化代码)联用.这一点非常有用因为你能在与最终产品尽可能相近情况下调试你代码.在你同时使用这两个选项时你必须清楚你所写一些代码已经在优化时被GCC作了改动.-pg选项告诉GCC在你程序里加入额外代码,执行时,产生gprof用剖析信息以显示你程序耗时情况.第58页GCC主要命令选项-ansi只支持ANSI标准C语法,将禁止GNUC一些特色-c 只编译并生成目标文件。-DMACRO 以字符串“1”定义MACRO宏。-DMACRO=DEFN 以字符串“DEFN”定义MACRO宏。-E 只运行C预编译器。-g 生成调试信息。GNU调试器可利用该信息。-IDIRECTORY 指定额外头文件搜索路径DIRECTORY。-LDIRECTORY 指定额外函数库搜索路径DIRECTORY。-lLIBRARY 连接时搜索指定函数库LIBRARY。-oFILE 生成指定输出文件。用在生成可执行文件时。-O0 不进行优化处理。-O或-O1-O2 优化生成代码。-O2 深入优化。-O3 比-O2更深入优化,包含inline函数。-shared 生成共享目标文件。通惯用在建立共享库时。-static 禁止使用共享连接。-UMACRO 取消对MACRO宏定义。-w 不生成任何警告信息。-Wall 生成全部警告信息。
第59页GNUmake 在大型开发项目中,通常有几十到上百个源文件,假如每次手工键入gcc命令进行编译话,则会非常不方便。所以,人们通常利用make工具来自动完成编译工作。假如仅修改了某几个源文件,则只重新编译这几个源文件;假如某个头文件被修改了,则重新编译全部包含该头文件源文件。 利用这种自动编译可大大简化开发工作,防止无须要重新编译。实际上,make工具经过一个称为makefile文件来完成并自动维护编译工作。makefile需要按照某种语法进行编写,其中说明了怎样编译各个源文件并连接生成可执行文件,并定义了源文件之间依赖关系。当修改了其中某个源文件时,假如其它源文件依赖于该文件,则也要重新编译全部依赖该文件源文件。
第60页GNUmake调用规则 默认情况下,GNUmake工具在当前工作目录中按以下次序搜索makefile:GNUmakefilemakefileMakefile 在UNIX系统中,习惯使用Makefile作为makfile文件。假如要使用其它文件作为makefile,则可利用类似下面make命令选项指定makefile文件:
$make-fMakefile.debug
第61页makefile基本结构makefile中普通包含以下内容:make工具创建项目,通常是目标文件和可执行文件。通常使用“目标(target)”一词来表示要创建项目。
要创建项目依赖于哪些文件。
创建每个项目时需要运行命令。
一个makefile文件中可定义多个目标,利用maketarget命令可指定要编译目标,假如不指定目标,则使用第一个目标 通常,makefile中定义有clean目标,可用来去除编译过程中中间文件;第62页Makefile应用示例
比如,假设你现在有一个C++源文件test.C,该源文件包含有自定义头文件test.h,则目标文件test.o明确依赖于两个源文件:test.C和test.h。另外,你可能只希望利用g++命令来生成test.o目标文件。这时,就能够利用以下makefile来定义test.o创建规则:
#Thismakefilejustisaexample.
test.o:test.Ctest.h g++-c-gtest.C
clean:rm-f*.o
第63页Makefile变量 GNUmake工具除提供建立目标基本功效之外,还有许多便于表示依赖性关系以及建立目标命令特色。其中之一就是变量或宏定义能力。假如你要以相同编译选项同时编译十几个C源文件,而为每个目标编译指定冗长编译选项话,将是非常乏味。但利用简单变量定义,可防止这种乏味工作:
#DefinemacrosfornameofcompilerCC=gcc
#DefineamacrofortheCCflagsCCFLAGS=-D_DEBUG-g-m486
#Aruleforbuildingaobjectfiletest.o:test.ctest.h $(CC)-c$(CCFLAGS)test.c
在上面例子中,CC和CCFLAGS就是make变量。GNUmake通常称之为变量,而其它UNIXmake工具称之为宏,实际是同一个东西。在makefile中引用变量值时,只需变量名之前添加$符号,如上面$(CC)和$(CCFLAGS)。
第64页GNUmake预定义变量(一)
GNUmake有许多预定义变量,这些变量含有特殊含义,可在规则中使用。下表给出了一些主要预定义变量,除这些变量外,GNUmake还将全部环境变量作为自己预定义变量。$* 不包含扩展名目标文件名称。$+ 全部依赖文件,以空格分开,并以出现先后为序,可 能包含重复依赖文件。$^ 全部依赖文件,以空格分开,不包含重复依赖文件。$? 全部依赖文件,以空格分开,这些依赖文件修改日期 比目标创建日期晚(依赖文件最近修改过)。$< 第一个依赖文件名称。$@ 目标完整名称。$%假如目标是归档组员,则该变量表示目标归档组员名称。
比如,假如目标名称为mytarget.so(image.o),
则$@为mytarget.so,而$%为image.o。
第65页GNUmake预定义变量(二)AR 归档维护程序名称,默认值为ar。ARFLAGS归档维护程序选项。AS 汇编程序名称,默认值为as。ASFLAGS汇编程序选项。CC C编译器名称,默认值为cc。CCFLAGSC编译器选项。CPP C预编译器名称,默认值为$(CC)-E。CPPFLAGSC预编译选项。CXX C++编译器名称,默认值为g++。CXXFLAGSC++编译器选项。FC FORTRAN编译器名称,默认值为f77。FFLAGSFORTRAN编译器选项。
第66页GNUmake隐含规则
GNUmake包含有一些内置或隐含规则,这些规则定义了怎样从不一样依赖文件建立特定类型目标。GNUmake支持两种类型隐含规则
后缀规则(SuffixRule)。后缀规则是定义隐含规则老格调方法。后缀规则定义了将一个含有某个后缀文件(比如,.c文件)转换为含有另外一个后缀文件(比如,.o文件)方法。每个后缀规则以两个成对出现后缀名定义,比如,将.c文件转换为.o文件后缀规则可定义为:
.c.o: $(CC)$(CCFLAGS)$(CPPFLAGS)-c-o$@$<
模式规则(patternrules)。这种规则愈加通用,因为能够利用模式规则定义愈加复杂依赖性规则。模式规则看起来非常类似于正则规则,但在目标名称前面多了一个%号,同时可用来定义目标和依赖文件之间关系,例以下面模式规则定义了怎样将任意一个X.c文件转换为X.o文件:
%.c:%.o $(CC)$(CCFLAGS)$(CPPFLAGS)-c-o$@$<
第67页函数库-glibc C语言并没有为常见操作,比如输入/输出、内存管理,字符串操作等提供内置支持。这些功效普通由标准“函数库”来提供。GNUC函数库,即glibc,是Linux上最主要函数库,它定义了ISOC标准指定全部库函数,以及由POSIX或其它UNIX操作系统统变种指定附加特色,还包含有与GNU系统相关扩展。当前,流行Linux系统使用glibc2.0以上版本。glibc基于标准包含:
ISOC:C编程语言国际标准,即ANSIC
POSIX:GNUC函数库实现了ISO/IEC9945-1:1996(POSIX系统应用程序编程接口,
即POSIX.1)指定全部函数。该标准是对ISOC扩展,包含文件系统接口原语、设备相关终端控制函数以及进程控制函数。
BerkeleyUnix
SVID:SystemV接口描述。GNUC函数库定义了大多数由SVID指定而未被ISOC和POSIX标准指定函数。来自SystemV支持函数包含进程间通信和共享内存、hsearch和drand48函数族、fmtmsg以及一些数学函数。
XPG:X/Open可移植性指南。GNUC函数库遵照X/Open可移植性指南(Issue4.2)
以及全部XSI(X/Open系统接口)兼容系统扩展,同时也遵照全部X/OpenUnix扩展。
第68页系统调用 系统调用是操作系统提供给外部程序接口。在C语言中,操作系统系统调用通常经过函数调用形式完成,这是因为这些函数封装了系统调用细节,将系统调用入口、参数以及返回值用C语言函数调用过程实现。在Linux系统中,系统调用函数定义在glibc中。谈到系统调用时,需要注意以下几点:系统调用函数通常(fork除外)在成功时返回0值,不成功时返回非零值。假如要检验失败原因,则要判断errno这个全局变量值,errno中包含有错误代码。
许多系统调用返回数据通常经过引用参数传递。这时,需要在函数参数中传递一个缓冲区地址,而返回数据就保留在该缓冲区中。
不能认为系统调用函数就要比其它函数执行效率高。要注意,系统调用是一个非常耗时过程。
第69页LINUX中库文件和头文件头文件/usr/include:系统头文件
/usr/local/include:当地头文件函数库/lib:系统必备共享库
/usr/lib:标准共享库和静态库
/usr/X11R6/lib:X11R6函数库
/usr/local/lib:当地函数库
共享库及其相关配置/etc/ld.so.conf:包含共享库搜索位置
ldconfig:共享库管理工具,普通在更新了共享库之后要运行该命令
ldd:可查看可执行文件所使用共享库
第70页语言编程格调
C语言最初来自UNIX操作系统,与UNIX设计标准一样,C语言被广泛认可和使用一个主要原因是它灵活性以及简练性。所以,在利用C语言编写程序时,一直应该符合其简练设计标准,而不应该使用非常复杂变量命名方法。Linus为Linux内核定义C语言编码格调关键点以下(一样适合用于普通用户程序):
缩进时,使用长度为8个字符宽Tab键。假如程序缩进超出3级,则应考虑重新设计程序。
大括号位置。除函数定义体外,应该将左大括号放在行尾,而将右大括号放在行首。函数定义体应将左右大括号放在行首。应采取简练命名方法。对变量名,不赞成使用大小写混写形式,但勉励使用描述性名称;尽可能不使用全局变量;不采取匈牙利命名法表示变量类型;采取短小精悍名称表示局部变量;防止使用过多局部变量。
保持函数短小精悍。不应过分强调注释作用,应尽可能采取好编码格调而不是添加过多注释。
第71页LINUX对目标代码格式支持 Linux支持各种类型可执行文件格式,如a.out、COFF、ELF、JAVA等。LINUX目标代码以两种形式存在:静态和动态,在gcc编译选项中经过“-static”或“–shared”来标识。比较内容静态格式动态格式代码长度较长,需要更多磁盘空间短执行影响无须调入动态库装入需要动态库装入程序,执行中占用更多资源和时间灵活性代码固定装配好,不方便修改能够经过动态库修改进行代码在线升级安全性难以在目标代码插入其它程序能够经过更改动态库插入其它代码第72页LINUX对各种目标代码格式支持
LINUX允许可执行文件能够有许多格式,甚至是一个脚本文件。脚本文件需要恰当命令解释器来处理它们;比如/bin/sh解释shell脚本。可执行目标文件包含可执行代码和数据,这么操作系统能够取得足够信息将其加载到内存并执行之。Linux最惯用目标文件是ELF,不过理论上Linux能够灵活地处理几乎全部目标文件格式。已注册二进制格式
经过使用文件系统,Linux所支持二进制格式既能够结构到关键又能够作为模块加载。关键保留着一个能够支持二进制格式链表(见上图),同时当执行一个文件时,各种二进制格式被依次尝试。
第73页LINUX下不一样目标文件格式a.out格式:“最古典”UNIX目标码格式.它使用一个简短文件头,而且在开始地方有一个magicnumber.主要它包含三个区块:.text,.data及.bss再加上一个符号表及一个字串表.FreeBSD使用a.out格式COFF目标文件格式:SVR3目标码格式.header是由一个区块表所组成,你能够有比.text,.data,及.bss更多区块,包含:.sdata,.sbss,.init,.fini,.rconst等。SVR3、Tru64UNIX采取此格式。
——参考正文图2.7第74页LINUX目标文件格式ELF(ExecutableandlinkingFormat)是
COFF
替换者,是UNIX系统试验室(USL)开发和公布二进制格式。ELF与其它目标文件格式相比,特点是多个区块及2^32或2^64可能容量,比a.out和COFF更强大更灵活。主要缺点是:与COFF和a.out相比,ELF开销稍大。在LINUX、SVR4、SCO和Solaris2.x上,ELF都作为可执行文件默认二进制格式。ELF可执行文件中包含可执行代码,即正文段:text和数据段:data。位于可执行映象中表描叙了程序应怎样放入进程虚拟地址空间中。静态连接映象是经过连接器ld得到,在单个映象中包含全部运行此映象所需代码和数据。
此映象同时也定义了映象内存分布和首先被执行代码地址。
第75页ELF目标代码三种存在形式ELF文件有三种主要类型:可执行文件 包含了代码和数据。含有可执行程序。
可重定位文件
包含了代码和数据(这些数据是和其它重定位文件和共享
object文件一起连接时使用),主要是哪些能够用于连接目标码
共享object文件(又可叫做共享库) 包含了代码和数据(这些数据是在连接时候被连接器ld和运行时动态连接器使用)。动态连接器可能称为
ld.so.1,libc.so.1或者ld-linux.so.1。
第76页目标代码幻数LINUX头文件a.out.h中定义了目标文件幻数:#defineOMAGIC0407 /*Codeindicatingobjectfileor impureexecutable.正文数据合一*/#defineNMAGIC0410 /*Codeindicatingpure executable.共享正文*/#defineZMAGIC0413 /*Codeindicatingdemand- pagedexecutable.*/#defineQMAGIC0314 /*Thisindicatesademanddexecutablewiththeheaderinthetext.ThefirstpageisunmappedtohelptrapNULLpointerreferences*/#defineCMAGIC0421 /*Codeindicatingcorefile.*/
第77页一个ELF映象文件分析 这是一个打印“HelloWorld”并退出简单C程序,文件头将其作为一个带两个物理文件头(e_phnum=2)ELF映象来描叙,物理文件头位于映象文件起始位置52字节处。 第一个物理文件头描叙是映象中可执行代码。它从虚拟地址0x8048000开始,长度为65532字节。映象入口点,即程序第一条指令,不是位于映象起始位置而在虚拟地址0x8048090(e_entry)处。 代码恰好接着第二个物理文件头。这个物理文件头描叙了此程序使用数据,它被加载到虚拟内存中0x8059BB8处。这些数据是可读并可写。第78页ELF目标格式sectionELF每个可执行文件或者是共享object文件普通包含一个sectiontable,该表是描述ELF文件里sections结构数组。下面说明了在ELF中定义几个主要sections。.text:正文段.rodata:只读数据段.sdata:small数据段.data:数据段.sbss:small未初始化数据段.bss:未初始化数据段.fini:该section保留着进程终止代码指令。所以,当一个程序正常退出时,系统安排执行这个section中代码。.init:该section保留着可执行指令,它组成了进程初始化代码。当一个程序开始运行时,在main函数被调用之前(c语言称为
main),系统安排执行这个section中代码。 .init和.finisections存在有着尤其目标。假如一个函数放到.initsection,在main函数执行前系统就会执行它。同理,假如一个函数放到.finisection,在main函数返回后该函数就会执行。该特征被C++编译器使用,完成全局结构和析构函数功效。
.ctors:
该section保留着程序全局结构函数指针数组。.dtors:该section保留着程序全局析构函数指针数组。
第79页与目标码相关几个主要命令LINUXBinutils软件包包含以下工具程序: gasp,gprof,ld,as,ar,nm,objcopy,objdump,ranlib,readelf,size,strings,strip,c++filt及addr2line。本文仅介绍:ObjcopyObjdumpNmReadelf——参考正文第80页本章小结 本章是用户编程一个基础,我们从介绍GNUC开始,逐步深入了解了GNUmake一些内容;经过对库、头文件、系统调用及程序设计编码格调学习,逐步结构了一个用户程序轮廓。 最终,我们介绍了LINUX支持目标代码及其布局,有利于我们系统地了解程序执行和解析过程。第81页第三章LINUX进程环境
及空间管理
第82页进程基本环境Main及命令行参数
intmain(intargc,char*argv[]);
进程终止五种方式(1)正常终止:(a)从main返回。(b)调用exit。(c)调用_exit。(2)异常终止:(a)调用abort。(b)由一个信号终止。
第83页程序环境变量每个程序都有一张环境表。与参数表一样,环境表也是一个字符指针数组,其中每个指针包含一个以null结束字符串地址。全局变量environ则包含了该指针数组地址。 externchar**environ;
第84页程序环境变量在历史上,大多数UNIX系统对main函数提供了第三个参数,它就是环境表地址:intmain(intargc,char*argv[],
char*envp[]
);ANSIC要求main函数只有两个参数,而且第三个参数与全局变量environ相比也没有带来更多益处,所以POSIX.1也要求应使用environ而不使用第三个参数。通惯用getenv和putenv函数来存取特定环境变量,而不是用environ变量。假如要查看整个环境,则必须使用environ指针。第85页常见环境变量第86页环境变量形成和传递过程Shell传递方式用户程序环境变量存放示例
——参考正文3.1.5第87页环境相关操作函数getenvputenvsetenvunsetenvclearenv ——参考正文3.2.1第88页C程序空间布局
目标代码幻数不一样,形成程序空间也存在差异,普通情况下包含:正文段初始化数据段BSS段,未初始化数据段(blockstartedbysymbol(由符号开始块)
栈段堆第89页动态存放空间分配——堆空间分配
ANSIC说明了三个用于存放空间动态分配函数。(1)malloc。分配指定字节数存放区。此存放区中初始值不确定。(2)calloc。为指定长度对象,分配能容纳其指定个数存放空间。该空间中每一位(bit)都初始化为0。(3)realloc。更改以前分配区长度(增加或降低)。当增加长度时,可能需将以前分配区内容移到另一个足够大区域,而新增区域内初始值则不确定。
——详细说明参考正文3.4.1第90页堆空间分配说明malloc和free基于Kernighan和Ritchie[1988]算法。大多数实现所分配存放空间比所要求要稍大一些(有对界要求),额外空间用来统计管理信息——分配块长度,指向下一个分配块指针等等。即使sbrk能够扩充或缩小一个进程存放空间,不过大多数malloc和free实现都不减小进程存放空间。释放空间可供以后再分配,但将它们保持在malloc池中而不返回给内核。
使用注意事项假如写过一个已分配区尾端,则会改写后一块管理信息。这种类型错误是灾难性,不过因为这种错误不会很快就暴露出来,所以也就极难发觉。将指向分配块指针向后移动也可能会改写本块管理信息。预防释放一个已经释放了块;调用free时所用指针要确保是三个alloc函数返回值(在使用指针时要尤其注意)
第91页空间分配系统调用brkmmapmunmap ——参考正文3.4.2第92页mmap实现共享空间访问两种方式使用普通文件提供内存映射:适合用于任何进程之间;此时,需要打开或创建一个文件,然后再调用mmap();经典调用代码以下:fd=open(name,flag,mode);if(fd<0)...
ptr=mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
该接口使得进程之间经过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程能够向访问普通内存一样对文件进行访问,无须再调用read(),write()等操作。
第93页mmap实现共享空间访问两种方式2) 使用特殊文件提供匿名内存映射
mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
适合用于含有亲缘关系进程之间;因为父子进程特殊亲缘关系,在父进程中先调用mmap(),然后调用fork()。 那么在调用fork()之后,子进程继承父进程匿名映射后地址空间,一样也继承mmap()返回地址,这么,父子进程就能够经过映射区域进行通信了。 注意,这里不是普通继承关系。普通来说,子进程单独维护从父进程继承下来一些变量。而mmap()返回地址,却由父子进程共同维护。对于含有亲缘关系进程实现共享内存最好方式应该是采取匿名内存映射方式。此时,无须指定详细文件,只要设置对应标志即可。
第94页mmap实现共享空间访问实例
——正文3.4.3第95页空间属性操作接口getpagesize-取得内存分页大小
mlock-锁定进程地址空间
munlock-解除锁定进程地址空间
munlockall-解除全部锁定进程地址空间mprotect-设置新存放空间访问特征
——接口和示例参考正文3.4.4第96页setjmp和longjmp函数在C中,不允许使用跳越函数goto语句。而执行这种跳转功效是函数setjmp和longjmp,这两个函数对于处剪发生在很深嵌套函数调用中犯错情况非常有用。Setjmp:保留当前执行进程上下文Longjmp:恢复到保留进程上下文执行进程上下文信息包含:定点存放器、浮点存放器、信号屏蔽、PC、栈地址等
正确了解用longjmp恢复上下文执行时栈、存放器和易失变量语义
——参考正文示例
3.7第97页
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度园林景观规划合同
- 运动鞋市场发展现状调查及供需格局分析预测报告
- 2024年度物流仓储租赁合同
- 软式网球项目评价分析报告
- 2024年度北京市个人汽车租借合同
- 2024年度山地区域水土保持合同:生态环境改善与保护
- 2024年度办公室租赁装修合同
- 红酒盛酒瓶市场发展现状调查及供需格局分析预测报告
- 2024年度农资连锁经营合同
- 2024年度乙状乙方网络安全服务合同
- 杜甫-大学语文课件
- 肿瘤科普课件
- 基于SpringCloud-微服务系统设计方案(完整资料)
- 四年级数学上册试题- 竞赛试题A卷(含答案)人教新课标
- 六年级家长会完整版课件
- 课堂纪律检查表
- 发现你的优势课件
- DBJ50-T-389-2021 高性能混凝土应用技术标准
- 我的家乡新疆介绍课件
- 应收账款分析报告
- 九年级上期中家长会(共35张)课件
评论
0/150
提交评论