windows编程考试终极复习资料2.0

上传人:xins****2008 文档编号:110761964 上传时间:2019-10-31 格式:DOC 页数:8 大小:73KB
返回 下载 相关 举报
windows编程考试终极复习资料2.0_第1页
第1页 / 共8页
windows编程考试终极复习资料2.0_第2页
第2页 / 共8页
windows编程考试终极复习资料2.0_第3页
第3页 / 共8页
windows编程考试终极复习资料2.0_第4页
第4页 / 共8页
windows编程考试终极复习资料2.0_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《windows编程考试终极复习资料2.0》由会员分享,可在线阅读,更多相关《windows编程考试终极复习资料2.0(8页珍藏版)》请在金锄头文库上搜索。

1、Win32应用程序编程接口(API)。1.3windows版本Windows Server 2003 定位于企业和服务器应用。1.7准备win64Win32和Win64的本质差异是指针变量的大小(win64是64位)以及虚拟地址空间的大小。2.1 windows文件系统Windows支持4种文件系统。1.NT文件系统(NTFS)。2.文件分配表(FAT&FAT32)。3.CD-ROM文件系统(CDFS)。4.通用磁盘格式(UDF)。只有NTFS支持安全性。2.2文件名目录和文件名不能包含任何ASCII字符在1-31之间的字符或者以下字符:*?”“ /目录和文件名称不区分大小写,但可以保留大小写

2、。2.4.2main函数C的main函数及其参数列表(argv),应该被宏tmain所代替。2.11.2目录管理创建或者删除目录涉及到一对简单函数:BOOL CreateDirectory(LPCTSTR lpPathName,LPSECURITY_ATTRIBUTES lpSecurityAttributes)BOOL RemoveDirectory(LPCTSTR lpPathName)3.5文件属性和目录处理有可能在目录中查找满足指定命名方式的文件和目录,同时获取文件属性。查找操作需要函数FindFirstFile获取的查找句柄,使用FindNextFile来获取指定的文件,以及使用Fi

3、leClose终止查找。3.5.2获取文件和目录属性的其他方式FindFirstFile和FindNextFile函数可以获取一下文件属性信息:属性标记、三个时间戳和文件大小。3.5.3临时文件名该名称可用于任何指定的目录,而且必须是唯一的。3.9文件处理策略C库提供了一些不同的优点,包括如下:1)代码可以移植到非windows平台。2)便捷的面向行和字符的函数,而windows中没有相对应的函数来化简字符串处理。3)C库函数通常比windows函数更易于使用。4)面向行和流字符的函数易于改变以进行普通调用,尽管失去了可移植性特定。5)C库可以在多线程环境下运行。C库也有一些限制。如下:1)C

4、库不能管理或遍历目录,也不能获取或设置大多数文件属性。2)C库在fseek函数中使用32位的文件位置,所以在顺序读取巨大文件的同时,却不能根据需要定位巨大文件的任何地方。3)C库中没有高级特性,比如文件安全性、内存映射文件、文件锁、异步I/O和进程间通信。3.10文件锁定文件锁可以是只读(共享)或读写(专有)。最重要的是锁属于进程。最普遍的函数是LockFileEx,其次是LockFile。在使用文件锁是应考虑以下因素:1)解锁应该同前面锁定使用完全相同的范围。2)锁不能跟文件现有的锁有重叠,否则会产生冲突。3)锁可以超出文件的长度范围,该方法在进程或线程扩展文件时有用。4)锁不能被新建的进程

5、继承。3.11注册表注册表是关于程序和系统配置信息的集中的分层的数据库。对注册表的访问是通过注册关键字来实现的,他跟文件系统目录相似,关键字可以包含其他关键字或名称/值对,他跟文件名称和内容是类似的。注册表名称/值对包含如下信息:1)操作系统版本号、编译号和注册用户。2)每个正确安装程序的相似信息。3)计算机处理器类型、处理器数量、系统内存等等信息。4)用户特定信息,比如主目录和程序选项。5)安全信息,比如用户账号。6)从文件扩展名刀可执行程序的映射。这些映射在用户点击文件名图标时通过用户界面shell使用。例如.doc扩展名映射到微软的word程序。7)映射网络地址到主机名。4.3错误和异常

6、*错误可以被当做一个可知位置偶然发生的事件,例如系统调用错误应该能被代码段中的逻辑立即检测和汇报。这样,程序一般包含明确的测试逻辑以判断文件读取操作是否有误,第二章采用ReportError函数来诊断并响应错误。另一方面,异常可能会在任何地方发生,而要对异常进行测试是不可能或不现实的。例如除以零和内存访问违规就是实际例子。虽然如此,但是两者的区别有时是模糊的。Windows可以在内存分配过程中使用HeapAlloc函数产生异常,二档内存不足时使用HeapCreat函数。程序可以通过使用RaiseException函数的程序员定义的异常代码来引起异常。异常处理器提供了不使用goto或longjm

7、p移交控制权,从而程序控制下的内部程序块或函数中推出的一个便利机制。当程序块访问资源,比如打开文件,内存或同步对像时,这种能力尤其重要,因为处理器可以释放他们,也有可能在异常处理器之后继续程序执行而不是终止程序,另外,当程序块中断退出时,程序可以恢复系统状态,比如浮点掩码。用户定义异常:RaiseException函数:VIOD RaiseException(DWORD dwExceptionCode,DWORD dwExceptionFlags,DWORD cArguments,CONST DWORD *lpArguments)4.5终止处理器终止处理器跟异常处理器的作用是相同的,但是程序当

8、线程由于正常程序流程程序块离开以及异常发生时,他才会执行。另一方面,终止处理器不能诊断异常。在try-finally语句使用_finally关键字来构建中止处理器。4.8控制台控制处理器异常处理器可以对不同的事件做出响应,但是它们不能探测到诸如用户注销或者从键盘上输入Ctrl-c以停止程序等之类的情形。控制台控制处理器可用于探测此类事件。4.10矢量异常处理矢量异常处理(VEH)管理跟控制台控制处理器管理是相似的,尽管细节有所不同。可以使用AddVectoredExceptionHandler来增加或注册一个处理器。PVOID AddVectoredExceptionHandler(ULONG

9、 FirstHandler,PVECTORED_EXCEPTION_HANDLER VectoredHandler)5.2堆Windows以堆得方式来维护内存池。一个进程可以包含多个堆,可以从浙西堆中分配内存。对于不同的数据结构,使用不同堆来分配有时是很方便的,不同堆的有点包括:1)公平。没有哪个线程可以获得比分配给其堆得内存还要多的内存,特别是由于程序忘记释放不在需要的数据单元而引起的内存泄漏缺点,只影响进程中的某个进程。2)多线程性能。每个线程具有自己的堆,线程之间的抢夺会减少,这充分提高了性能。3)分配效率。在小堆内分配固定大小的数据单元比在巨大的堆内分配许多不同大小单元的效率更高。分段

10、也减少了。而且,每个线程具有唯一的堆简化了同步,所以产生了更高的效率。4)解除分配效率。整个堆及其包含的所有数据结构可以用单个函数调用来释放。该调用同时也释放堆中任何泄漏的内存分配。5)引用局部化的效率。在一个小堆维护数据结构确保单元限制在相对少量的页面中,这无形中减少了数据结构单元处理时的页面错误。注意:堆没有安全属性,因为他在进程之外是不可以访问的。要销毁整个堆,使用HeapDestroy。这是CloseHandle函数移除不需要的句柄的规则例外。BOOL CloseHandle(HANDLE hHeap)5.3管理堆内存通过指定堆句柄、块大小和几个标记来从堆中获得内存块的函数:LPVOI

11、D HeapAlloc(HANDEL hHeap,DWORD dwFlags,SIZE_T dwBytes)返回值:正常时返回已分配内存块的指针,失败时返回NULL(除非预先指定异常处理方式)。解除堆内存分配的函数: BOOL HeapFree(HANDLE hHeap,DWORD dwFlags,LPVOID lpMen)内存块可以重新分配以改变其大小 函数如下:LPVOID HeapReAlloc(HANDLE hHeap,DWORD dwFlags,LPVOID lpMen,SIZE_T dwBytes)返回值:正常时返回重新分配内存块的指针,失败时返回NULL,或产生异常。通过堆句柄和

12、块指针来调用HeapSize以决定分配块的大小。DWORD HeapSize(HANDLE hHeap,DWORD dwFlags,LPVOID lpMen)返回值:正常时返回分配内存块的大小,失败时返回零。5.3.4小结:堆管理使用堆得通常过程如下1)使用CreateHeap或者GetProcesSEHap来获取一个堆句柄。2)使用HeapAlloc在堆内分配块。3)可选的,使用HeapFree释放一些或所有的单个块。4)使用HeapDestroy删除堆并关闭句柄。5.5内存映射文件Windows内存映射文件功能也可以将虚拟内存空间直接映射到普通文件。这有几个优点:1)没有必要执行直接的文件

13、I/O(读写)。2)在内存中创建的数据结构将会保存在文件中,以便以后被相同的或不同的程序使用。3)方便而有用的内存算法(排序、查找树、字符串处理等等)可以处理文件数据,即使该文件可能比可用的物理内存要大得多。如果文件比较大,那么性能挥手道页面调度行为的影响。4)文件处理性能在同样情况细也能充分提升。5)没有必要管理缓存及其所含文件数据。操作系统能有效而可靠的完成这一艰巨任务。6)多个进程可以共享内存,通过映射虚拟地址空间到相同的文件或到页面调度文件中(进程间内存共享是映射到页面调度文件的主要原因)。7)没有必要消耗页面调度空间。5.9.1静态和动态库DLL是文件映射最明显和重要的应用。创建进程

14、常用函数,比如ReportError,可以放入一个库中以简化创建进程。这种单映像模式简单,但又几个缺点1)可执行映像可能很大,在运行时消耗硬盘空间和物理内存,并需要过多的精力来管理机交付给用户。2)每次程序更新需要编译整个程序,即使改变很小或局部的。3)系统中使用该函数的每个程序在其可执行映像中都具有该函数的一个副本,可能包含不同版本,这种安排增加了磁盘空间,或许更重要的是,当几个这样的程序同时运行时会增加物理内存的使用频率。4)使用不同技术的不同程序版本则要求在不同的环境下获取最佳性能。DLL(优点)巧妙大的解决了这些及其他问题1)库函数在创建程序时没有连接。相反,他们在程序装载时(隐式连接

15、)或者运行时(显式链接)链接。结果,程序映像可以小很多,因为他不包含函数库。2)DLL可用于创建共享库。多个程序以DLL德形式共享单个库,而只有一个副本装载到内存中,所有程序映射到他们进程的地址空间到DLL代码中,尽管每个线程在堆栈中具有自己不共享的存储副本。3)新版本或替代实现可以通过提供一个新版DLL来实现,而所有使用该库函数的程序无需修改就可以使用该新版本。4)有了显式链接,程序也可以在运行时决定应该使用哪个版本的库。不同的库可能是同一函数的代替实现,也可能执行完全不同的任务,就像不同程序一样。同用程序一样,哭在同一进程和线程中运行。多个进程可以共享DLL代码,而且可以使用调用线程的堆栈。所以DLL具备线程安全性。5.11DLL入口点串口化是必须的,因为DllMain必须在没有中断的情况下执行完初始化。5.12DLL版本管理DLL的一个主要优点是多个程序可以共享单个实现。然而该能力导致了兼容复杂性,正如下所述:1)新函数会增加,是的隐式连接程序在链接.LIB文件时所假定的偏移量无效。而显式链接则避免了这个问题。2)新版本会改变行为,引发现有未更新的程序问题。3)依赖新DLL函数的程序有时链接着较老的DLL版本。DLL兼容性问题解决方案:1)使用DLL版本号作为.DLL和.LIB文件名的一个组成部分,通常是作为后缀。例如Utility_3_0.DLL和Utility_3_0.

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

最新文档


当前位置:首页 > 大杂烩/其它

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