高级系统程序设计

发布 2021-05-05 21:05:28 阅读 5258

重庆科技学院。

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

专业班级。学号。

姓名。成绩。

摘要。在windows api中,有自己独特的i/o操作,与c/c++中的i/o操作有何种区别;并且windows中的内核对象是怎样定义的,具体是怎样操作。windows有自己的内存架构,根据特定的要求有不同的管理内存方法,其中堆适合大量的小对象,然而内存映射文件适合大文件,各自具有不同的特性。

关键字:i/o 内核对象堆内存映射文件。

目录。公共部分 1

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

1.1.1 c/c++ i/o 1

1.1.2windows i/o 2

1.1.3总体区别 3

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

1.2.1windows中的内核对象 3

1.2.2内核对象与指针的区别 4

选题部分 5

2.1windows内存管理构架 5

2.2内存映射文件 5

2.2.1怎样使用内存映射文件 5

2.2.2内存映射文件的使用特点 6

2.3堆 9

2.3.1使用堆 9

2.3.2堆的使用特点 10

3.总结 12

参考文献 13

致谢 141)用标准库,通过调用函数实现标准输入,输出。

c/c++的输入/输出由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写。而且在c++中还新定义了i/o流,在c语言中,标准库提供了两个控制台格式化输入、输出函数printf()和。

scanf(),这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。

printf()函数用来向标准输出设备(屏幕)写数据,具体格式为printf("《格式化字符串》",参量表》);scanf()函数用来从标准输入,具体格式为:scanf("《格式化字符串》",地址表》);

例如:输入:printf(”hahahahaha”);

输出:scanf(“%d”,&a);

在c++中,i/o流是一系列写到屏幕上或从键盘上读出的字节序列。将i/o流定义为类,执行标准的输入输出操作时,一般使用i/o流cin作为输入,cout作为输出。在以及中可以找到i/o流的定义。

中定义了如下四个对象:cin键盘输入(stdin)、cout屏幕输出(stdout)、cerr标准错误设备输出(stderr)、clog标准错误缓冲输出(stderr)。

例如:cin>>name;

cout<<”helllo world!”;

cerr<<”error!”;

clog<<”error log!”

2)用标准库,进行文件的读写操作。

在c语言中,打开文件的操作通过标准库函数fopen 完成,它返回一个file指针值,赋给一个file类型的指针变量,通过指针对文件进行操作;fopen的函数原型,file *fopen(const char *filename,const char *mode);关闭文件通过fclose完成,其原型为 int fclose(file *stream);

例如:以读的方式打开文件fname

file *fp;

fp=fopen(fname,”r”);

fclose(fp);

对于对文件的输入输出,分为字符的输入输出、格式化输入输出、行式输入输出。

在c++中,提供了对磁盘文件进行读写,并且使用一个与输入文件相关的变量来代替cin,使用一个与输出文件相关的变量来代替cout。进行文件操作必须包含头文件分stream。

也就是定义一个ifstream类型变量来读文件,定义一个ofstream类型变量来写文件,操作完后关闭文件。

例如:c++中要打开一个文件。

ifstream infile;

ofstream outfile;

打开文件。关闭文件。

在windows中,把文件和所有其他的输入输出设备的操作都统一由createfile等系列函数完成,也就是老师说的将将其他输入输出设备当做文件来处理。

这个createfile()函数返回了一个文件内核对象句柄,这里说的文件不是狭义上的磁盘文件,也包括一些设备,比如邮槽,命名管道和匿名管道等等, 这些函数,会创建一个i/o内核对象,并取得该对象的句柄值,然后我们可以调用与具体设备相关的函数,并传入得到的设备内核对象句柄,来和设备进行通信。和其他内核对象一样,可以调用函数closehandle来关闭createfile创建的i/o内核对象。

例如:在邮槽通信中,每个服务器使用createmailslot创建邮槽句柄,服务器就要使用readfile调用等待接收写的邮槽信息。并且只的客户应该使用createfile打开邮槽并使用writefile写入消息。

对文件的基本操作有四个函数createfile() writefile() readfile() closefile()

对文件的打开以及关闭。

文件打开:handle createfile(

lpctstr lpfilename文件名。

dword dwdesiredaccess访问模式。

dword dwsharemode共享模式。

lpsecurity_attributes lpsecurityattributes, /安全属性。

dword dwcreationdispositionhow to create

dword dwflagsandattributes文件属性。

handle htemplatefile模板文件句柄。

文件关闭:bool closehandle(handle hobject)

例如:打开一个haha命名可读可写不可共享已存在的文件,handle hfile;

hfile=(haha,generic_read|generic_write,0,null,open_existing,0,null);

closehandle(hfile);

文件的读写操作。

boolreadfile(

handlehfile,//文件的句柄。

lpvoidlpbuffer,//用于接收数据的缓冲区。

dwordnnumberofbytetoread,//允许接收的最大字节数。

lpdword lpnumberofbyteread//实际读入字节的数量。

lpoverlappedlpoverlapped,//一个overlapped结构的指针。

boolwritefile (

handlehfile,//文件的句柄。

lpcvoidlpbuffer,//用于写入数据的缓冲区。

dwordnnumberofbytestowrite,//允许写入的最大字节数。

lpdword lpnumberofbytewritten//实际写入的字节数量。

lpoverlappedlpoverlapped,//一个overlapped结构的指针。

在windows中,共有两种i/o机制,一种是同步i/o另一种是异步i/o。同步i/o是线程执行一个输入输出函数时,输入输出工作执行完毕后,函数返回继续执行以后的**。异步i/o是线程执行一个输入输出函数时,函数不等待读/写操作完成便立即返回,线程可先去执行下文,执行下文时可查询刚刚发起的读/写操作是否完成。

同步i/o将会阻塞线程的执行,异步i/o是更加高效的。

在异步i/o的使用,有三种方法,多线程i/o、重叠i/o以及带有完成例程的重叠i/o

多线程i/o:一个或一组进程中的每个线程执行同步i/o,但其他线程可以继续执行。

重叠i/o:线程在发出读、写或其他i/o操作命令之后继续执行。当线程需要i/o结果才能继续执行,它要么等待文件句柄,要么等待在readfile或writefile重叠结构中指定的一个事件。

带有完成例程的重叠i/o:系统在i/o操作完成时调用线程内一个特定的完成例成**函数。

在c/c++中,有关输入输出的操作,都有通过库函数;然而在windows系统编程中,把文件和所有其他的输入输出设备的操作都统一由createfile等系列函数完成,也就是老师说的将将其他输入输出设备当做文件来处理。并且可以采用异步i/o提高效率。

高级程序设计

信息与通信工程学院。高级程序设计 实验报告。学号 s314080098 专业 信息与通信工程 学生姓名 李长玺。任课教师 杨志钢。2015年3月。实验一。一 任务描述。1 设计一个带头结点的单链表,并随机生成一组序列,存入该单链表中。2 针对上一步生成的单链表,编写算法,将其中的数据元素按照值递增的...

高级程序设计

高级程序设计 是为电子商务专业学生开设的专业基础课程。开设高级程序设计课程的目的是,进行程序设计和面向对象方法的基础训练 应用新技术开发各种适用于网络环境的应用程序。本课程前导课程为 无。本课程后续课程为 旅游管理软件开发技术 旅游移动客户端设计与应用 景区app设计与应用。本课程的功能是通过课堂教...

高级语言程序设计通讯录系统

高级语言程序设计 课程设计。说明书。目录。1 课程设计综述 3 1.1 课程设计的题目 3 1.2 课程设计的目的 3 1.3 题目要求 3 2 概要设计 4 3 详细设计 5 3.1 流程图 5 4 功能调试 6 4.1 主界面 6 4.2添加功能 8 4.3修改功能 9 4.4删除功能 10 4...