高级c语言程序设计考试复习

上传人:第*** 文档编号:33187522 上传时间:2018-02-14 格式:DOC 页数:14 大小:378KB
返回 下载 相关 举报
高级c语言程序设计考试复习_第1页
第1页 / 共14页
高级c语言程序设计考试复习_第2页
第2页 / 共14页
高级c语言程序设计考试复习_第3页
第3页 / 共14页
高级c语言程序设计考试复习_第4页
第4页 / 共14页
高级c语言程序设计考试复习_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《高级c语言程序设计考试复习》由会员分享,可在线阅读,更多相关《高级c语言程序设计考试复习(14页珍藏版)》请在金锄头文库上搜索。

1、高级程序设计考试复习在本周末(周日上午 8 点之前),将答案写在本文件中一同发我 QQ 邮箱。每个人都提交。一、 关于 C 语言的高级部分1. 关于基本数据类型写出 float x 与“零值”比较的 if 语句。 If(x0.000001 2. 关于数组(1) 用递归法用一句代码求整型数组中所有元素的和。分析:如果数组元素个数为 0,则和为 0,否则,要算出 n 个元素的和,先需要算 n-1 个元素的和。int sum(int a,int n)return n=0?0:sum(a,n-1)+an-1;(2) 字符串逆序给定一个含有 n 个元素的字符数组 a,将其原地逆序。void nixu(c

2、har *a,int n)int left=0;int right=n-1;while(left”,联合体名-成员名。联合体也可以出现在结构体内,其成员也可以是结构体,struct Int agc;Char *addr;UnionInt I;Char *chx;y10;7. 预编译的三个主要作用是什么?预编译是在程序编译之前由编译器进行的源代码处理工作。包括宏定义,文件包含,条件编译。宏定义作用:在预处理过程中将源程序中的标识符替换成字符串文件包含:在预处理过程中用包含文件的内容取代#include 命令条件编译:#ifdef 标识符如果标识符已被 #define 命令定义过则对程序段 1 进

3、行编译;否则对程序段 2 进行编译。 二、 嵌入式 IO 操作1. 不带缓存的 IO 操作什么是系统调用,什么是 API?利用不带缓存的 IO 操作,的打开文件,关闭文件,读文件和写文件以及定位的函数分别是什么?系统调用:linux 内核中设置了一组用于实现系统功能的子程序,成为系统调用。API(Application Programming Interface,应用程序 编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。 打开,关闭,读写,定位文件的函数:open ,close ,read,writ

4、e,lseekint open(const char *pathname, /*被打开的文件名(可包括路径名)*/const char flags, /*文件打开的方式*/int perms); /*被打开文件的存取权限,为 8 进制表示法*/int close(int fd); ssize_t read/write (int fd, /*文件描述符*/ void *buf, /*指定存储器读出数据或写入数据的缓冲区*/size_t count); /*指定读出或写入的字节数*/ off_t lseek(int fd, /*文件描述符*/off_t offset, /*偏移量,每一个读写操作所

5、需要移动的距离,单位 是字节的数量,可正可负(向前移,向后移)*/int whence); /*文件当前位置的基点*/2. 带缓冲的 IO 操作带缓冲的什么是系统调用,什么是 API?利用不带缓存的 IO 操作,的打开文件,关闭文件,读文件和写文件以及定位的函数分别是什么?打开文件有 3 个标准函数,分别为:fopen、fdopen 和 freopen。关闭标准流文件的函数为 fclose 读文件和写文件、定位:按字符读写:fgetc/getc/getchar fputc/putc/putchar 按行读写:fgets fputs/puts按指定格式读写:fread fwrite文件定位:fs

6、eek/rewind ftell 返回流式文件的当前位置三、 进程通信1进程和线程的差别。 与进程的区别是什么?线程是指进程内的一个执行单元,也是进程内的可调度实体。(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。 什么是进程,什么是进程控制块,什么是进程标识,如何获得进程标识 PID。 进程

7、是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程,它是程序执行和资源管理的最小单位。 进 程 控 制 块 (PCB): 系 统 为 了 管 理 进 程 设 置 的 一 个 专 门 的 数 据 结 构 , 用 它 来 记 录 进 程 的 外 部 特 征 , 描 述 进 程 的 运 动 变 化 过 程 。 系 统 利 用 PCB 来 控 制 和 管 理 进 程 , 所 以 PCB 是 系 统 感 知 进 程 存 在 的 唯 一 标 志 。 进 程 与 PCB 是 一 一 对 应 的 。进 程 标 识 : Linux 内 核 通 过 惟 一 的 进 程 标 识 值 PID

8、来 标 识 每 个 进 程 。 PID 是各进程的代号,每个进程有唯一的 PID 编号。它是进程运行时系统随机分配的,并不代表专门的进程。在运行时 PID 是不会改变标识符的,但是你终止程序后再运行任务管理器后 PID 标识符就会改变。 进程的运行状态有哪些,画出进程状态之间的转换逻辑图。 进程状态(state) 运行(TASK_RUNNING) 可中断(TASK_INTERUPTIBLE) 不可中断(TASK_UNINTERUPTIBLE) 僵死(TASK_ZOMBIE) 停止(TASK_STOPPED) Linux 下一个进程主要包括哪三个段?它们的作用分别是什么? 1/ 数据段,代码段,

9、堆栈段 2/数据段:存放全局变量、常数以及动态数据分配的空间(malloc 函数取得的空间) ; 代码段:存放程序代码; 堆栈段:存放子程序的返回地址、子程序的参数以及程序的局部变量。 Linux 下的进程分为哪两种运行模式,两种模式之间是如何切换的? 核心态和用户态 通过系统调用,即操作系统向用户程序提供支持的接口,通过这些接口应用程序向操作系统请求服务,控制转向操作系统,而操作系统在完成服务后,将控制和结果返回给用户程序。通过系统调用从用户空间切换到内存空间,在内核空间完成相应的功能后,又在由用户空间切换到内核空间、 Linux 下如何启动一个进程?调度进程是对进程做哪些操作? fork(

10、)通过拷贝当前进程的内容创建一个子进程,子进程与父进程的区别仅仅在于不同的 PID、PPID 和其他一些资源。exec 函数负责读取可执行文件并将其载入地址空间开始运行 。 根据优先级的范围,可以把进程分为实时进程(这里的实时是软实时)和普通进程。实时进程优先级高于普通进程,并由特定的调度策略来保证它们的(软)实时性。在调度时,系统总是首先选取具有最高优先级的并且拥有活跃进程的进程组,然后进行相同优先级下的进程调度。 Linux 下创建一个进程的函数是什么?如何判断创 fork 函数返回值是属于父进程或子进程?fork 在创建一个新的进程时候,都复制了父进程的哪些内容?现 在 的 任 务 调

11、用 fork () 函 数 并 且 创 建 一 个 新 进 程 TASK _ RUNNING ( 准 备 就 绪 但 还 未 运 行 ) TASK _ RUNNING ( 正 在 运 行 ) TASK _ INTERRUPTIBLE 或 TASK _ UNINTERRUPTIBLE TASK _ ZOMBIE ( 任 务 被 终 止 ) 调 度 程 序 将 任 务 投 入 运 行 任 务 被 更 高 的 优 先 级 抢 占 为 等 待 特 定 事 件 任 务 睡 眠 等 待 的 特 定 时 间 发 生 后 任 务 被 唤 醒 进程的创建:fork。执行一次却返回两个值,父进程的返回值是子进程的

12、进程号,而子进程则返回 0. int result = fork(); /*通过 result 的值来判断 fork 函数的返回情况,首先进行出错处理*/ if(result = -1 /*返回值为 0 代表子进程*/ else if(result = 0) /*返回值大于 0 代表父进程*/ else /*父进程相关语句*/ 子进程复制父进程的内容:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。 用 exec 函数族启动一个进程和 fork 有什么异同点? 在用 fork 函数创建子进程后,子进程往往要调用一

13、种 exec 函数以执行另一个程序。 当进程调用一种 exec 函数时,该进程完全由新程序代换,而新程序则从其 main 函数开始执行。因为调用 e x e c 并不创建新进程,所以前后的进程 I D 并未改变 exec 只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。fork 函数用于创建一个子进程,该子进程几乎复制了父进程的全部内容,但是这个新创建的子进程不能执行其他代码。而 exec 函数可以在一个进程中启动另一个程序执行。它可以根据制定的路径和文件名找到可执行文件,并用它来取代原调用进程的数据段,代码段,堆栈段,在执行完后原调用进程的内容除了进程号外,其他全部被新的内容替换 退

14、出当前进程使用什么函数,等待子进程用什么函数? exit 退出当前进程 wait 等待子进程 什么是守护进程,它和普通进程有什么区别? 守护进程( daemon)是生存期长的一种进程。它们常常在系统引导装入时起动,在系统关闭时终止。因为它们没有控制终端,所以说它们是在后台运行的。 所有守护进程都以超级用户(用户 I D 为 0)的优先权运行。 没有一个守护进程具有控制终端 终端名称设置为问号(?)、终端前台进程组 I D 设置为1。 所有这些守护进程的父进程都是 i n i t 进程 四、 进程间通信 Linux 统环境下,进程间通信主要包括哪几种方式? 管道(pipe)和有名管道(fifo),信号(signal),消息队列,共享内存,信号量,套接字(socket) 管道通信通过什么函数创建管道,创建管道的时候,fd0和 fd1分别如何负责读写的。 Pipe()函数 fd0用于读取管道,fd1用于写入管道。父进程通过 fork 函数创建子进程,子进程通过 fd【1】写入管道,父进程通过 fd0读取管道,然后父进程在写,子进程读。关闭父进程 fd1和子进程fd0 信号通信的基本原理是什么?信号通信周期包括哪几个阶段。 信号实在软件层次上对中断机制的一种模拟,是一种异步通信方式。 信号可以直接进行用户空间进

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

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