| 实验名称: | 实验二、API系统调用 | ||||
| 班 级: | 姓 名: | 学 号: | |||
| 类 型: | 必做 | 实验地点: | 日 期: | 2013-4-24 | |
一、实验目的:
1.理解操作系统接口的概念,理解程序接口和系统调用
2.熟练使用API应用程序接口函数,
3.比较程序接口和系统调用的区别和适用环境
| 4.了解WINDOWS 的动态链接库和应用程序接口;了解WINDOWS应用程序接口(API)函数的使用过程;掌握在面向对象程序设计语言中利用API访问操作系统的方法。 |
| 二、实验环境: 1.PC机一台(VC、C、VB等编程环境) |
| 三、实验内容和要求: 1.使用若干个程序接口,实现一定的用户访问要求 2.通过系统调用实现:获取本机操作系统版本号 3.通过系统调用实现:修改本机“计算机名” 4.分析和理解所使用的系统调用以及所涉及的数据结构 实验准备:了解什么是动态链接、动态连接库、动态链接的过程、WINDOWS提供的API函数的作用、常用的API函数库有那几个、应用程序接口的使用方法(如如何声明、调用API的方式等) |
| 四、实验步骤: (对实验步骤的说明应该能够保证根据该说明即可重复完整的实验内容,得到正确结果。) 1、根据实验要求编写源程序代码:利用API分别实现函数调用来获取本机OS版本号和修改本机计算机名。 编写程序 #include using namespace std; #include void getversion() { OSVERSIONINFO os; os.dwOSVersionInfoSize=sizeof(os); GetVersionEx(&os); if(os.dwMajorVersion==5&&os.dwMinorVersion==0) cout<<"\\n该计算机的操作系统为:Windows 2000 版本号为:"< cout<<"\\n该计算机的操作系统为:Windows Vista 版号:"< cout<<"\\n该计算机的操作系统为:Windows 7 版本号为:"< cout<<"\\n该计算机的操作系统为:其他版本 版本号为:"< void getname() { const int nBufSize=MAX_COMPUTERNAME_LENGTH+1; TCHAR chBuf[nBufSize]; DWORD dwRet=nBufSize; GetComputerName(chBuf,&dwRet); cout<<"\\n该计算机名称为:"< void setname() { cout<<"输入需要修改的新计算机名,只在重启后生效"< newname:cin>>chBuf; if(SetComputerName(chBuf)) cout<<"\\n修改成功,重启后生效,如未生效 检查系统是否有还原保护"< { cout<<"\\n修改失败!请检查输入计算机名是否为非法字符。请重新输入计算机名:"< } } void main() { getversion(); getname(); setname(); } 2、执行程序,并输出结果。 |
| 5、实验结果与分析(含程序、数据记录及分析和实验总结等): 编译后,运行调用。但由于系统安装了还原保护,计算机不能重新命名 1.OSVERSIONINFO:微软的Win32应用程序编程接口(API)包含了描述当前操作系统配置的函数。 2.typedef struct _OSVERSIONINFO{ DWORD dwOSVersionInfoSize; //指定该数据结构的字节大小 DWORD dwMajorVersion; //操作系统的主版本号 DWORD dwMinorVersion; //操作系统的副版本号 DWORD dwBuildNumber; //操作系统的创建号 DWORD dwPlatformId; //操作系统的ID号 TCHAR szCSDVersion[ 128 ]; } OSVERSIONINFO; 3.如果需要获取计算机名、版本号、重设计算机名,则使用以下三个函数GetComputerName();GetVersionEx();SetComputerName(); 1).GetComputerName():取得这台计算机的名称; [参数表] lpBuffer ------- String,随同计算机名载入的字串缓冲区 nSize ---------- Long,缓冲区的长度。这个变量随同返回计算机名的实际长度载入 [返回值] Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError 2).GetVersionEx():用于获得当前运行的操作系统的版本扩展信息。 [参数表] 参数 lpVersionInformation 返回值 Long,非零表示成功,零表示失败 3).SetComputerName():函数设置计算机名,系统下次启动时将使用该名称。参数:lpszName 指向一个以NULL结束的字符串,该字符串指定新的计算机名。该名称不得比MAX_COMPUTERNAME_LENGTH个字符长。 返回值:若该函数成功,返回值为TURE;否则,返回值为FALSE。使用GetLastError函数可获得补充的错误信息。 |
| 六:思考题: 1、API的作用 API是应用程序接口,它是提供给用户用来编程的,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。它的特点是代码的不可以见行,是操作系统最基本的东西,它构成了系统的内核环境,所以通过API我们可以在系统的最底层进行编程,可以通过它来对计算机硬件操作。 2、修改本机“计算机名”是否成功?如果不成功原因是什么。 修改并没有成功,原因是为重新启动计算机,如果重新启动计算机,但由于系统有还原保护,故无法修改计算机名。 3、获取本机操作系统版本号的系统调用函数有两个,它们的区别是什么? 获取本机操作系统版本号的系统调用函数有GetVersion和GetVersionEx。 GetVersion高位字节代表主要版本号,低位字节代表次要版本号,但通常程序员都会颠倒。 GetVersionEx是为了解决GetVersion带来的问题,而开发的,用它能够得到更详细的Windows系统的版本信息。 |