高级系统大作业

发布 2020-01-02 05:13:28 阅读 4975

重庆科技学院。

高级系统程序设计》大作业。

专业班级。学号。

姓名。成绩。

目录。公共部分 2

1请综合比较c/c++中i/o的使用方法与本课程程序实践中所采用的i/o方法各自的特点,并请举例分析说明? 2

i/o 2i/o 2

2请结合具体的例子解释什么是内核对象,对内核对象的操纵与之前学习的对指针的操作方法有什么本质的区别? 2

2.1.内核对象 2

2.2.句柄与指针的区别 2

选题部分 2

题目一:综合比较windows内存管理中内存映射文件和堆2钟方法各自的特点,写出你的详细分析结论并请编程举例说明,必须在大作业中给出你的每个程序的设计思考过程和关键程序**段,完整的源程序可在附录中给出。 2

3.1.堆 2

3.1.1.创建堆 2

3.1.2. 从堆中分配内存块 2

3.1.3再分配内存块 2

3.1.4 释放堆内存、撤消堆 2

3.2.内存文件映射 2

3.2.1创建或打开文件内核对象 2

3.2.2.创建一个文件映射内核对象 2

3.2.3.将文件数据映射到进程的地址空间 2

3.2.4从进程的地址空间中撤消文件数据的映象 2

3.2.5关闭文件映射对象和文件对象 2

i/o是input/output的缩写,即输入输出端口。每个设备都会有一个专用的i/o地址,用来处理自己的输入输出信息。

1) 简明与可读性。

从直观上来看,c++的这种改变使得i/o 语句更为简明,增加了可读性。用i/o运算符(提取运算符》和插入运算符<<)代替不同的输入输出函数名(如printf,scanf 等)是一个大的改进。如:

printf("n=%d,a=%f",n,a); cout<<"n="<2) 类型安全(type safe)

所谓类型安全,是指在进行i/o 操作时不应对于参加输入输出的数据在类型上发生不应有的变化。如:

show(int color,float sizecout<<"color="<在这个函数的调用过程中,系统(编译器)将自动按参数的类型定义检查实参的表达式,显示的结果中,第一个自然是整数值,第二个size 必然是浮点类型值。如果采用printf()函数,由于其参数中的数据类型必须由程序员以参数格式%d,%f,%c,%s 的形式给出,同样实现上述函数show(),就可能产生编译器无法解决的问题:

show(int color,float sizeprintf("color=%f,size=%d",color,size);

在确认输出数据类型时发生错误是可能的,这时输出数据的类型:color 是int 型,size 是float 型,与printf()中给出的参数格式符%f 对应color,%d 对应于size,两者发生了矛盾。因此说,它是类型不安全的。

而c++的i/o系统不会出现这种情形。

3) 易于扩充。

在 c++语言所附的i/o 系统,在其流类的定义中,把原来c++语言中的左、右移位运算符《和》,通过运算符重载的方法,定义为插入(输出)和提取(输入)运算符。这就为输入输出功能对于各种用户定义的类型数据的扩充,创造了方便的条件。

而在 文件中说明的 printf()函数却很难做到这一点。例如在c++语言提供的i/o 系统中,它是把运算符‘<<的重载函数作为输出流类 ostream 的成员函数来定义的,分别对字符串char,short,int,long,float,double,const void *(指针)等类型作了说明。在此基础上,难对于新的类型数据的输出来重载运算符‘<<它可以作为用户定义的类型。

4)c/c++文件和流i/o各自操作特点。

文件分为文本文件(ascii文件)和二进制文件,文件只与信息的输入输出相关,而且这种输入输出是串行序列形式的,所有把文件的概念抽象为“流”(stream)。

c语言基于流式文件操作,file在头文件中定义。 常见的file文件结构操作函数:fopen() 打开流, fclose() 关闭流, fputc() 写一个字符到流中, fgetc() 从流中读一个字符, fseek() 在流中定位到指定的字符, fputs() 写字符串到流 ,fgets() 从流中读一行或指定个字符, fprintf() 按格式输出到流 ,fscanf() 从流中按格式读取 ,feof() 到达文件尾时返回真值 ,ferror() 发生错误时返回其值 , remove() 删除文件 ,fread() 从流中读指定个数的字符 fwrite() 向流中写指定个数的字符。

fopen举例说明:

file *fp; /创建一个文件指针。

if(fp=fopen(""wb"))以wb方式,只写打开或新建一个二进制文件;只允许写数据。

puts("打开文件成功");

else puts("打开文件成败");

fread举例说明:

char x[4230];

file *file1=fopen("c:\");

fread(x,200,12 ,file1);/共读取200*12=2400个字节。

c++的i/o 系统,定义了一系列由某种继承派生关系的流类,并为这些抽象的流类定义一系列的i/o 操作函数,当需要进行实际的i/o 操作时,只需创建这些类的对象(称为流),并令其与相应的物理文件(硬盘文件名或外设名)相联系。因此,文件可以说是个物理概念,而流则是一个逻辑概念。i/o 操作是针对抽象的流来定义的,对文件的i/o 操作,其前提是把该文件与一个(对象)流联系起来,这是c++的i/o 系统的基本原理。

在c++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件。

在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:void open(const char* filename,int openmode,int access);/文件名字、打开方式、打开文件属性。

举例说明: 以二进制输入方式打开文件c:\

fstream file1; "c:\"ios::binary|ios::

in,0); close()关闭文件就把file1相连的文件关闭。要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:read(unsigned char *buf,int count);write(const unsigned char *buf,int count);

read()从文件中读取 count 个字符到 buf 指向的缓存中,如果在还未读入 count个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 count个字符到文件中,值得注意的是缓存的类型是 unsigned char *,注意可能需要类型转换。

例:unsigned char str1=hello world";

int n[5];

ifstream in(""

ofstream out(""

把字符串str1全部写到中。

char*)n,sizeof(n));从中读取指定个整数,注意类型转换。

一、 两种读/写机制。

输入input / 输出output:

同步i/o: 线程执行一个输入输出函数时,输入输出工作执行完毕后,函数返回继续执行以后的**。异步i/o:

线程执行一个输入输出函数时,函数不等待读/写操作完成便立即返回,线程可先去执行下文,执行下文时可查询刚刚发起的读/写操作是否完成。同时执行的i/o线程的数量不应该大于cpu数量,客户发起的i/o请求需要一个队列,每次并发处理的i/o操作应该等于cpu数量,如果并发处理的i/o请求数量太多,cpu切换过于频繁,会将cpu资源浪费**程切换上,从而严重降低程序性能。

二、读/写前后的工作:创建与释放要读/写的设备的内核对象。

要对设备进行读/写,必须先知道创建一个用于该设备的读写的内核对象,在读/写之后,释放该内核对象。创建i/o内核对象的函数: createfile(..

与其他内核对象一样,我们获取的仅仅是一个句柄。这个createfile函数返回了一个文件内核对象句柄,这里说的文件不是狭义上的磁盘文件,也包括一些设备,比如串口,并口,邮件槽,命名管道和匿名管道。

高级系统大作业

重庆科技学院。高级系统程序设计 大作业。专业班级。学号。姓名。成绩。目录。公共部分 3 1请综合比较c c 中i o的使用方法与本课程程序实践中所采用的i o方法各自的特点,并请举例分析说明?3 i o 3i o 3 2请结合具体的例子解释什么是内核对象,对内核对象的操纵与之前学习的对指针的操作方法...

系统辨识大作业

系统辨识。大作业。1.考虑如下系统。式中,为白噪声。取初值,分别选择m序列和方差为1的正态分布白噪声作为输入信号,采用递推最小二乘算法进行参数估计,迭代l 400步停止计算。要求。i 给出基本迭代公式 ii 画出程序流程框图 iii 画出输入输出数据曲线 参数估计曲线 误差曲线 提示 产生长度为l方...

系统辨识大作业

系统辨识大作业 递推增广最小二乘法。题目一 已知一系统为两输入单输出系统,观测数据受有色噪声污染,噪信比为n s 0.1。系统经2000次采样,存放于文件中。系统输入u1为7级m序列,u2为u1的63步移位序列。模型类可选为 a q 1 y k b1 q u1 k b2 q u2 k w k c q...