- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
04 第五次课 UNIX系统编程
第五章 系统编程 一、基础知识 文件和目录 输入和输出 程序和进程 信号 时间值 系统调用和库函数 二、程序开发步骤 三、文件系统界面 四、进程界面 基础知识1 ——文件和目录 1.文件系统 UNIX文件系统是目录和文件组成的一种层次结构,目录的起点称为根(root),其名字是一个字符/。目录是一个包含许多目录项的文件。 2.文件名 目录中的各个名字称为文件名。创建新目录时会自动创建两个文件名:. (点)和 .. (点-点)。 3.路径名 一个或多个以斜线分隔的文件名序列构成路径名,以斜线开头的路径名称为绝对路径名,否则称为相对路径名。 4.工作目录 每个进程都有一个工作目录(或称当前工作目录)。所有相对路径名都从工作目录开始解释。 5.起始目录 登录时,工作目录设置为起始目录(home directory),该起始目录从口令文件中相应用户的登录项中取得。 基础知识2 ——输入和输出 1. 文件描述符 文件描述符(file descriptor)是一个非负整数,内核用它标识一个特定进程正在访问的文件。当内核打开一个已有文件或创建一个新文件时,它返回一个文件描述符。 2. 标准输入、标准输出和标准出错 每当运行一个新程序时,shell为其打开三个文件描述符:标准输入、标准输出以及标准出错。 3. 不用缓冲的I/O(针对文件描述符) 函数open、read、write、lseek以及close提供了不用缓冲的I/O。 4. 标准I/O(针对流) 标准I/O函数提供一种对不用缓冲I/O函数的带缓冲的接口。(fgets, fputs, fread, fwrite) 基础知识3 —— 程序与进程 1.程序 程序(program)是存放在磁盘上、处于某个目录中的一个可执行文件。使用6个exec函数中的一个由内核将程序读入存储器,并使其执行。 2.进程和进程ID 程序的执行实例被称为进程(process)。UNIX系统确保每个进程都有一个唯一的数字标识符,称为进程ID(process ID)。进程ID总是一非负整数。 3.进程控制 有三个用于进程控制的主要函数:fork、exec和waitpid。 4. 线程和线程ID 通常一个进程只有一个控制线程(thread),同一时刻只执行一组机器指令。对于某些问题,如果不同部分各使用一个控制线程,会简化解决过程。另外,多个控制线程也能充分利用多处理器系统的并行性。 在一个进程内的所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为它们能访问同一存储区,所以各线程在访问共享数据时需要采取同步措施(互斥量、信号量等)以避免不一致性。 与进程相同,线程也用ID标识。但是,线程ID只在它所属进程内起作用。控制线程的函数与控制进程的函数类似,但另有一套。 基础知识4 ——信号 信号(signal)是通知进程已发生某种情况的一种技术。进程如何处理信号有三种选择。 (1) 忽略该信号。 (2) 按系统默认方式处理。对于除以0的情况,系统默认方式是终止该进程。 (3) 提供一个函数,信号发生时则调用该函数,这被称为捕捉该信号。 很多情况会产生信号。终端键盘上有两种产生信号的方法,分别称为中断键(通常是Delete键或Ctrl+C)和退出键(通常是Ctrl+D),它们被用于中断当前运行的进程。另一种产生信号的方法是调用名为kill的函数。在一个进程中调用此函数就可向另一个进程发送一个信号。 基础知识5 ——时间值 UNIX系统使用两种不同的时间值: (1) 日历时间。该值是自1970年1月1日00:00:00以来国际标准时间(UTC)所经过的秒数累计值。这些时间值可用于记录文件最近一次的修改时间等。 (2) 进程时间。这也被称为CPU时间,用以度量进程使用的中央处理机资源。 当度量一个进程的执行时间时,UNIX系统使用三个进程时间值: ? 时钟时间:进程运行的时间总量; ? 用户CPU时间:执行用户指令所用的时间; ? 系统CPU时间:执行内核程序所经历的时间; 基础知识6 ——系统调用和库函数 所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务,这些入口点被称为系统调用(system call)。 无论系统调用如何实现,它的定义总是用C语言表示的。做法是:UNIX为每个系统调用在标准C库中设置一个具有同样名字的函数。用户进程用标准C调用序列来调用这些函数,然后,函数又用系统所要求的技术调用相应的内核服务。 库函数与系统调用不同,它可以不需要OS的介入来完成工作,并且也不是进入内核的入口点,尽管它们可以调用一至多个系统调用。 从实现者的角度观察,系统调用和库函数之间有重大区别;但从用户角度来看,其区别并不非常重要。 二、
文档评论(0)