/***************************************************************************mycmd模仿Windows的cmd.exe(1)提供两个内部命令(不必开启子进程,在当前进程中执行), cd和dir
cd 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(){char cmdline[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
}
详细解决方案
操作系统 实验一 多线程 (模拟)
热度:19 发布时间:2023-11-06 18:13:09.0
相关解决方案
- c# vs2005 操作Excel 发布有关问题 急 报下面的错误, 服务器是2003 操作系统
- 统计一下子,大家开发都用什么工具的.操作系统?Microsoft Visual Studio 2005,Microsoft Visual SourceSafe哪一个板本
- ASP.NET的编程测试运行环境(操作系统、开发环境、数据库),该如何解决
- 汇编 操作系统,该怎么解决
- 操作系统!解决方案
- 操作系统!该怎么解决
- 各位老师,小弟我现在用的是Xp 操作系统,怎样在xp 操作系统下运行Asp 文件
- 操作系统 linux,在本机实施exp数据导出,导出的dmp中的汉字为乱码
- 如何用 JAVA 编成实现 获得本机的 内存信息 和 操作系统 信息 以及硬盘信息呢
- Windows Phone Emulator 无法连接到Windows Phone 操作系统,求解决~该如何解决
- Windows Phone Emulator 没法连接到Windows Phone 操作系统,求解决~
- 操作系统 分段机制,该如何处理
- 操作系统 扇区的题目解决思路
- 操作系统 扇区的标题
- 操作系统--关键问题
- 操作系统--基本概念
- 【考研】操作系统:2019年真题43(同步互斥问题)
- 【操作系统】进程(线程)间同步互斥问题——高校上机实习问题
- 【操作系统】进程(线程)间同步互斥问题——熟睡的理发师问题
- 操作系统——实现临界区互斥的基本方法
- 操作系统——页面淘汰算法
- 操作系统 实验一 多线程 (模拟)
- 操作系统 FCFS先到先服务调度算法
- 《操作系统》一二章总结
- 操作系统 常用调度算法 总结
- 操作系统 进程管理 总结
- 操作系统 (第三章测试3.1)
- 《操作系统》第四章习题加解析
- 《操作系统》第一章习题加解析
- [操作系统]临界区访问与“先人后己”的过河精神