unix_linux核心编程(精简)

上传人:xh****66 文档编号:61936008 上传时间:2018-12-15 格式:PPT 页数:372 大小:4.75MB
返回 下载 相关 举报
unix_linux核心编程(精简)_第1页
第1页 / 共372页
unix_linux核心编程(精简)_第2页
第2页 / 共372页
unix_linux核心编程(精简)_第3页
第3页 / 共372页
unix_linux核心编程(精简)_第4页
第4页 / 共372页
unix_linux核心编程(精简)_第5页
第5页 / 共372页
点击查看更多>>
资源描述

《unix_linux核心编程(精简)》由会员分享,可在线阅读,更多相关《unix_linux核心编程(精简)(372页珍藏版)》请在金锄头文库上搜索。

1、,Unix/Linux 核心编程,课程内容,Unix/Linux操作系统简介 GNU编译工具GCC GNU C 内存管理 文件I/O 进程管理 信号 进程间通信 多线程 网络通信,Unix/Linux操作系统,Unix操作系统,UNIX操作系统,是美国AT&T公司于1971年在PDP-11上运行的操作系统。具有多用户、多任务的特点,支持多种处理器架构,最早由肯汤普逊(Kenneth Lane Thompson)、丹尼斯里奇(Dennis MacAlistair Ritchie)和Douglas McIlroy于1969年在AT&T的贝尔实验室开发。 Unix的三大派生版本 System V B

2、erkley Hybrid,System V,AIX Solaris HP-UX IRIX,Berkley,FreeBSD 一种类UNIX操作系统,但不是真正意义上的UNIX操作系统,它是由经过BSD、386BSD和4.4BSD发展而来的Unix的一个重要分支 NetBSD 是一份免费,安全的具有高度可定制性的类Unix操作系统,适于多种平台,从64位AMDAthlon服务器和桌面系统到手持设备和嵌入式设备 OpenBSD 一个从NetBSD衍生出来的类Unix操作系统 Mac OS X 是苹果公司开发的专属操作系统Mac OS的最新版本。它是一套Unix基础的操作系统,包含两个主要的部份:核

3、心名为Darwin,是以FreeBSD源代码和Mach微核心为基础,由苹果公司和独立开发者社区协力开发;及一个由苹果电脑开发,名为Aqua之专有版权的图形用户界面。,Hybrid,Minix 名称取自英语Mini UNIX,是一个迷你版本的类Unix操作系统(约300MB) Linux 是一类Unix计算机操作系统的统称,Unix族谱,Linux简介,Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux是一个

4、领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux得名于计算机业余爱好者Linus Torvalds。 Tux(一只企鹅,全称为tuxedo)是Linux的标志,和Linux相关,MINIX 操作系统 MINIX 系统是由Andrew S. Tanenbaum(AST)开发的。AST 是在荷兰Amsterdam 的Vrije 大学数学与计算机科学系统工作,是ACM 和IEEE 的资深会员 GNU

5、 计划 POSIX 标准 GPL通用公共许可证,GNU计划,GNU Project由Richard Stallman 发起开始于1984年,由自由软件基金 (FSF :Free Software Foundation)支持。 GNU的基本原则是共享。 GNU的主旨在于发展一个类似 Unix ,并且为自由软件的完整操作系统: GNU 系统。 目前已经有各种使用 Linux 作为内核的 GNU 操作系统正被广泛地使用著;这些系统通常被称作为“Linux”,但准确的说应该被称GNU/Linux” 系统 。,POSIX 标准,POSIX(Portable Operating System Interf

6、ace for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。 POSIX.1 仅规定了系统服务应用程序编程接口(API),仅概括了基本的系统服务标准 在90 年代初,POSIX 标准的制定正处在最后投票敲定的时候,Linux刚刚起步,这个UNIX 标准为Linux 提供了极为重要的信息,使得Linux 的能够在标准的指导下进行开发,能够与绝大多数UNIX 系统兼容。,GPL通用公共许可证,GNU通用公共许可证(GPL)

7、一个法定的版权声明,但附带(或,在技术上去除了某些限制),在条款中,允许对某项成果以及由它派生的其余成果的重用,修改和复制对所有人都是自由的。 非版权(copyleft) copyleft带有标准的Copyright声明,确认作者的所有权和标志。但它放弃了标准copyright中的某些限制。它声明:任何人不但可以自由分发该成果,还可以自由地修改它。但你不能声明你做了原始的工作,或声明是由他人做的。最终,所有派生的成果必须遵循这一条款(相当于继承关系),版本命名,早期版本 第一个版本的内核是0.01。其次是0.02,0.03,0.10,0.11,0.12(第一GPL版本),0.95,0.96,0

8、.97,0.98,0.99及1.0。 旧计划(1.0和2.6版之间),版本的格式为A.B.C,其中A,B,C代表: A大幅度转变的内核。这是很少发生变化,只有当发生重大变化的代码和核心发生才会发生。在历史上曾改变两次的内核:1994年的1.0及1996年的2.0。 B是指一些重大修改的内核。 内核使用了传统的奇数次要版本号码的软件号码系统(用偶数的次要版本号码来表示稳定版本)。 C是指轻微修订的内核。这个数字当有安全补丁,bug修复,新的功能或驱动程序,内核便会有变化。 第三次,自2.6.0(2003年12月)发布后,人们认识到,更短的发布周期将是有益的。自那时起,版本的格式为A.B.C.D,

9、Linux特点,遵循GNU/GPL 开放性 多用户 多任务 设备独立性 供了丰富的网络功能 可靠的系统安全 良好的可移植性,Linux发行版,大众的Ubuntu 优雅的Linux Mint 锐意的Fedora 华丽的openSUSE 自由的Debian 简洁的Slackware 老牌的RedHat,GNU 编译工具gcc,编译工具-GCC,编译,如C、C+、Object C、Java、Fortran、Pascal、Ada等语言。GCC是可以在多种硬件平台上编译出可执行 在使用GCC编译程序时,编译过程可以细分为4个阶段: a.预处理。 b.编译。 c.汇编。 d.链接。 程序员可以对编译过程进

10、行控制,同时GCC提供了强大的代码优化功能。 查看gcc的版本:gcc v,C程序中的文件后缀名,编译单源程序,语法:gcc 选项参数 c文件 通用选项参数说明如下: 1、指定输出文件名 -o 指定输出文件 例子:gcc -o main ch01.c 2、警告与提示. -pedantic 检测不符合ANSI/ISO C语言标准的源代码,使用扩展语法的地方将产生警告信息。 -Wall 生成尽可能多的警告信息。 -Werror 要求编译器将警告当做错误进行处理。,3、指定编译文件类型 -x 指定编译代码类型,c、c+、assembler,none。None根据扩展名自动确认。 例子:gcc x c

11、 -Wall o main ch01.c 4、生成调试信息与优化 -g 生成调试信息 -O 优化 5、建议:在编译任何程序的时候都带上-Wall选项。,编译多源程序,语法:gcc 选项 C源代码1 C源代码2 C源代码3 思考:头文件的作用是什么?,预处理,语法:gcc -E C源代码文件 示例: gcc -E -o ch01.i ch01.c gcc -E -o ch01_1.i ch01_1.c 注意: 预处理每次只能处理一个文件。不能处理多个文件,就是每个.c文件对应一个.i文件。 不指定 o 选项,预处理的结果输出到标准输出设备。,预处理指令介绍,#error、#warning,#in

12、clude #define VERSION 3 /* 演示编译器gcc */ #if (VERSION 2) #error “版本低“ #else #warning “版本高“ #endif int main() printf(“Hello gcc使用!n“); return 0; ,#include、#include_next,1.系统头文件使用#include 2.用户头文件使用#include “” 规则: 1.系统头文件会在I参数指定得目录中查找。 2.用户头文件会在当前目录查找。 3.Unix标准系统目录 /usr/local/include /usr/lib/gcc-lib/版本/

13、include /usr/include 4.编译C+优先查找/usr/include/g+ 5.#include 会在所有标准目录的子目录sys中查找time.h 6.#include的文件名含扩展,*、?无意义。除非文件名中包含*。,#line,int re=0; printf(“Hello gcc使用!n“); for(int i=0;i200) re+=i; printf(“out:%dn“,re); /代码行数被修改 #line 200 printf(“out:%dn“,re,a);/人为错误 printf(“out:%dn“,re);,#pragma,所有GCC的pragma都定义

14、两个词GCC +其他 #pragma GCC dependency 文件名 提示符号 测试文件的时间戳,当指定文件比当前文件新的时候产生警告。 #pragma GCC poison 每次使用指定名字就会产生警告 pragma pack(1) ,#pragma有一个等价的宏_Pragam,#include #pragma GCC dependency “ch02.c“ /#pragma GCC poison printf add int main() int re=0; printf(“Hello gcc使用!n“); int i; _Pragma(“GCC poison printf add“

15、) for(i=0;i200;i+) re+=i; printf(“out:%dn“,re); return 0; ,预定义宏介绍,编译环境变量,C_INCLUDE_PATH : 查找头文件的目录。C。 CPATH :查找头文件,相当于-l选项。 CPLUS_INCLUDE_PATH :查找头文件的目录。C+。 LD_LIBRARY_PATH :编译没有影响,主要影响运行。指定目录便于定位共享库。 LIBRARY_PATH :查找连接文件,相当于-l选项,生成汇编,编译成汇编 gcc -S ch01.c ch01_1.c 编译汇编 gcc ch01.s ch01_1.s -o main,创建静

16、态库,编译静态库 gcc -c -static ch01_1.c 其中-static可选,可阻止gcc使用共享库 不使用共享库会使可执行文件变大,但会减少运行时间开销 ar指令 ar -r libmy.a ch01_1.o 语法:ar 选项 归档文件名 目标文件列表 指令ar的常用选项,使用静态库,gcc -o main ch01.c libmy.a 如果libmy.a在LIBRARY_PATH的指定目录中,还可以采用如下方式编译。 gcc ch01.c -o main lmy,创建共享库,编译共享库 编译共享库分成两个部分: 编译成位置独立代码的目标文件,选项-fpic 编译成共享库,选项-shared gcc -c -fpic ch01_1.c gcc -shared ch01_1.o -o libmy.so 使用一条指令的效果一样 gcc -fpic -shared ch01_1.c -o libmy.so,定位共享库,共享库编译的时候与静态库一样依赖LIBR

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号