操作系统 实验一 多线程 (模拟)
来源:互联网 发布:软件测试员培训 编辑:程序博客网 时间:2024/06/10 15:11
/***************************************************************************mycmd模仿Windows的cmd.exe(1)提供两个内部命令(不必开启子进程,在当前进程中执行), cd和dircd c:\cd ..dir(2)对于执行可执行程序,则开启子进程来执行该程序,例如C:\Program Files\Internet Explorer\iexplore.exe/*实验设计:邹昌伟:google_007@sohu.com*/****************************************************************************/#include <windows.h>#include <stdio.h> #include <string.h>#define BUFSIZE 4096 #define MAXLINE 4096BOOL CreateChildProcess(char * szCmdline); void processCmdline(char * szCmdline);PROCESS_INFORMATION piProcInfo;/******************************************************************显示目录path下的所有文件和子目录@param char * path 形如 e:\data\*********************************************************************/void dir(char * path){HANDLE hFile;WIN32_FIND_DATA fd;BOOL bRet = TRUE;bRet = TRUE;hFile = FindFirstFile(path, &fd);while (hFile != INVALID_HANDLE_VALUE && bRet){printf("%s\n",fd.cFileName);bRet = FindNextFile(hFile, &fd);} FindClose(hFile); //}void processCmdline(char * szCmdline){char path[MAXLINE];if(strncmp(szCmdline,"dir",3) == 0){GetCurrentDirectory(MAXLINE,path);strcat(path,"\\*");dir(path);}else if(strncmp(szCmdline,"cd",2) == 0){char * ptr = szCmdline;ptr += 2;while(*ptr == ' ' || *ptr == '\t'){ptr++;}SetCurrentDirectory(ptr);}else{ if(CreateChildProcess(szCmdline)) { WaitForSingleObject(piProcInfo.hProcess,INFINITE); //实验要求补全代码部分 CloseHandle(piProcInfo.hProcess); CloseHandle(piProcInfo.hThread); } else printf("出错\n"); }printf("\n");}int main(){charcmdline[MAXLINE];char path[MAXLINE];ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );printf("Microsoft Windows\n(C)版权所有 FJNU CSE 2013\n\n");GetCurrentDirectory(MAXLINE,path);printf("%s>",path);while (fgets(cmdline, MAXLINE, stdin) != NULL) {if (cmdline[strlen(cmdline) - 1] == '\n'){cmdline[strlen(cmdline) - 1] = 0; /* replace newline with null */}//用户可能直接输入回车if(cmdline[0] != 0){processCmdline(cmdline);}GetCurrentDirectory(MAXLINE,path);printf("%s>",path);}return 0;}BOOL CreateChildProcess(TCHAR * szCmdline){ STARTUPINFO siStartInfo;ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );siStartInfo.cb = sizeof(STARTUPINFO); siStartInfo.dwFlags |= STARTF_USESTDHANDLES; siStartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);siStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);return CreateProcess(NULL, szCmdline, // command line NULL, // process security attributes NULL, // primary thread security attributes TRUE, // handles are inherited 0, // creation flags NULL, // use parent's environment NULL, // use parent's current directory &siStartInfo, // STARTUPINFO pointer &piProcInfo); // receives PROCESS_INFORMATION }
阅读全文
0 0
- 操作系统 实验一 多线程 (模拟)
- 华师 操作系统实验 实验一
- 操作系统实验一实验报告
- 操作系统实验工具使用实践(一)
- 操作系统实验一(进程管理)
- 电子科技大学---操作系统课程实验(一)
- 操作系统实验一(进程管理)
- 操作系统实验一
- 操作系统实验一
- 操作系统实验(一)
- 操作系统实验一
- 操作系统 银行家算法模拟(一)
- 操作系统 单处理器进程调度模拟实验(c++)
- 操作系统实验之最近最久未使用算法(LRU)模拟
- 操作系统实验一——模拟进程调度时间片轮转算法
- 实验一 多线程
- 操作系统实验(2)-- 模拟操作系统的页面置换 LRU OPT FIFO
- 操作系统 实验一 进程控制
- leetcode 174. Dungeon Game
- tenserflow中board可视化问题
- PHP实现搜索附近的人
- Aliddns插件使用:小白超详细图文教程
- 干货|Linux中限制目录占用空间
- 操作系统 实验一 多线程 (模拟)
- 常用惯性元器件
- 树莓派3利用VNC实现远程桌面
- 使用NOPI实现导出已有固定模板的Excel报表
- Spring Boot学习(二)之属性配置文件详解
- iOS主流进度加载提示工具
- 网页静态化--Freemarker
- 曲线拟合问题
- 基于SuperMap iDesktop制作天地图1--10级详细说明