操作系统实验报告三Word文件下载.docx
《操作系统实验报告三Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告三Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
步骤一:
进入WindowsXP。
步骤二:
进入MicrosoftVisualStudioC++6.0。
步骤三:
在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如D:
\1.cpp),并命名为1.cpp。
步骤四:
将下面的程序源代码输入。
步骤五:
单击Windows系统的“开始”→“运行”选项,输入cmd。
步骤六:
依次输入命令为
cd\
d:
//这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方
CL1.cpp//对这是源程序进行编程
步骤七:
若没有错误,则会自动生成1.exe和1.obj文件,双击“1.exe”,即可看到结果。
源代码如下:
#include<
windows.h>
stdio.h>
//告诉连接器与包括MessageBoxAPI函数的user32库进行连接
#pragmacomment(lib,”user32.lib”)
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
∷MessageBox(
NULL,//没有父窗口
“hellowindowsXP”,//消息框中的文本显示hellowindowsXP
“提示”,//消息框的标题
MBOK);
//其中只有一个OK按钮
//返回0以便通知系统不进入消息循环
return0;
修改后的程序:
#include<
#pragmacomment(lib,"
user32.lib"
)
{
:
:
MessageBox(
"
hellowindowsXP"
//消息框中的文本显示hellowindowsXP
提示"
//消息框的标题
MB_OK);
}
6、扩展实验
1、获得和使用进程的句柄
步骤二:
MicrosoftVisualStudioC++6.0。
步骤三:
在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如:
D:
\2.cpp。
步骤四:
步骤五:
单击Windows系统的“开始”→“运行”选项,输入cmd。
步骤六:
依次输入命令为:
cd\
d:
//这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方
CL2.cpp//对这是源程序进行编译
步骤七:
若没有错误,则会自动生成2.exe和2.obj文件,双击2.exe,
程序源代码如下:
#include<
windows.h>
iostream.h>
stdio.h>
//确定自己的优先权的简单应用程序
voidmain()
﹛
//从当前过程中提取句柄
HANDLEhProcessThis=:
:
GetCurrentProcess();
//请求内核提供该过程所属的优先权类
DWORDdwPriority=:
GetPriorityClass(hProcessThis);
//发出消息,为用户描述该类
std:
cout〈〈“currentprocesspriority:
”;
switch(dwPriority)
caseHIGHPRIORITYCLASS:
std:
cont<
<
”High”;
break;
caseNORMALPRIORITYCLASS:
coutg<
”Normal”,
caseIDLEPRIORITYCLASS;
std:
cout<
”Idle”;
caseREALTIMEPRIORITYCLASS:
”Realtime”;
default:
”<
unknown>
﹜
Std:
std:
endl;
Getchar();
修改后运行如下:
#include<
#include<
string>
iostream>
usingnamespacestd;
{
HANDLEhProcessThis=:
GetCurrentProcess();
DWORDdwPriority=:
GetPriorityClass(hProcessThis);
cout<
"
currentprocesspriority:
;
caseHIGH_PRIORITY_CLASS:
High"
caseNORMAL_PRIORITY_CLASS:
Normal"
caseIDLE_PRIORITY_CLASS:
cout<
Idle"
caseREALTIME_PRIORITY_CLASS:
Realtime"
getchar();
}
将
下的拉入到cmd运行的窗口
将出输出2.exe如下图:
2)利用句柄来获得进程的详细信息
进入进入WindowsXP。
在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如D:
\3.cpp),并命名为3.cpp。
cd\
d:
CL3.cpp//对这是源程序进行编译
若没有错误,则会自动生成3.exe和3.obj文件,双击”3.exe”,
tglhelp32.h>
//当在用户模式机内模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法
DWORDGetKernelModePercentage(constFILETIME&
ftKernel,
constFILETIME&
User)
//将FILETIME结构转化为64位整数
ULONGLONGqwKernel=(((ULONGLONG)ftKernel.dwHighDateTime)
<
32)+ftKernel.dwLowDateTime;
ULONGLONGqwUser=(((ULONGLONG)ftUser.dwHighDateTime)
32)+ftUser.dwLowDateTime;
//将消耗时间相加,然后计算消耗在内模式下的时间百分比
ULONGLONGqwTotal=qwKernel+qwUser;
DWORDdwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);
Return(dwPct);
//以下是将当前运行过程名和消耗在内模式下的时间百分数都显示出来的应用程序
Voidmain()
//对当前系统中运行的过程拍取“快照”
HANDLEhSnapshot=:
CreateToolhelp32Snapshot(
TH32CSSNAPPROCESS,//提取当前过程
0);
//如果是当前过程,就将其忽略
//初始化过程入口
PROCESSENTRY32pe;
ZeroMemory(&
pe,sizeof(pe));
pe.dwSize=sizeof(pe)
BOOLbMore=:
Process32First(hSnapshot,&
pe);
While(bMore)
//打开用于读取的过程
HNDLEhProcess=:
OpenProcess(
PROCESSQUERYINFORMATION,//指明要得到信息
FALSE,//不必继承这一句柄
pe.th32ProcessID);
//要打开的过程
if(hProcess!
=NULL)
//找出进程的时间
FILETIMEftCreation,ftKernelMode,ftUserMode,ftExit;
GetProcessTimes(
hProcess,//所感兴趣的进程
&
ftCreation,//进程的启动时间
ftExit,//结束时间(如果有的话)
ftKernelMlde,//在内核模式下消耗的时间
ftUserMode);
表//在用户模式下消耗的时间
//计算内核模式消耗的时间百分比
DWORDdwPctKernel=:
GetKernelModePercentage(
ftKernelMode,//在内核模式上消耗的时间
ftUserMode);
//在用户模式下消耗的时间
//向用户显示进程的某些信息
Cout<
”processID:
pe.th32ProcessID
”,EXEfile:
”<
pe.szExeFile
“,%inKernelmode:
dwPctKernel<
endl;
//消除句柄
CloseHandle(hProcess);
//转向下一个进程
bMore=:
process32Next(hSnapshot,&
getchar();
运行结果没错如下:
tlhelp32.h>
//当在用户模式机内模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法
DWORDGetKernelModePercentage(constFILETIME&
ftKernel,constFILETIME&
ftUser){
//将FILETIME结构转化为64位整数
ULONGLONGqwKernel=(((ULONGLONG)ftKernel.dwHighDateTime)<
ULONGLONGqwUser=(((ULONGLONG)ftUser.dwHighDateTime)<
//将消耗时间相加,然后计算消耗在内模式下的时间百分比
ULONGLONGqwTotal=qwKernel+qwUser;
DWORDdwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);
returndwPct;
//以下是将当前运行过程名和消耗在内模式下的时间百分数都显示出来的应用程序
//对当前系统中运行的过程拍取“快照”
HANDLEhSnapshot=:
TH32CS_SNAPPROCESS,//提取当前过程,
0);
//初始化过程入口
PROCESSENTRY32pe;
pe.dwSize=sizeof(pe);
BOOLbMore=:
while(bMore)
//打开用于读取的过程
HANDLEhProcess=:
PROCESS_QUERY_INFORMATION,//指明要得到信息
FALSE,//不必继承这一句柄
pe.th32ProcessID);
if(hProcess!
=NULL)
//找出进程的时间
FILETIMEftCreation,ftKernelMode,ftUserMode,ftExit;
hProcess,//所感兴趣的进程
&
ftKernelMode,//在内核模式下消耗的时间
//计算内核模式消耗的时间百分比
DWORDdwPctKernel=:
ftKernelMode,//在内核模式上消耗的时间
ftUserMode);
//向用户显示进程的某些信息
cout<
processID:
EXEfile:
%inKernelmode:
//消除句柄
:
}
//转向下一个进程
bMore=:
Process32Next(hSnapshot,&
执行cmd窗口步骤后,运行图如下:
打开3.exe如下:
五、分析与讨论
此次实验有涉及到三个实验的修改程序,刚开始看到代码什么都不懂,但是在同学的帮助下,修改第一个程序,才突然晓得原来改的地方并不是很多,有些只是符号的修改。
还有在cmd窗口的运行下,由于一直打入cd\后,没把C:
\ProgramFiles\MicrosoftVisualStudio\VC98\Bin文件里一个批处理文件
拉入窗口中,然后在打入clx.cpp就可以输出exe文件。
六、教师评语
签名:
日期:
成绩