Windows/_System Programming
명령 프롬프트(Cmd) 작성
Dakuo
2010. 2. 9. 04:20
#include <stdio.h> #include <windows.h> #include <stdlib.h> #include <tchar.h> #include <locale.h> #define STR_LEN 256 // 문자열 길이 #define CMD_TOKEN_NUM 10 // 입력가능한 최대 문자열 개수 TCHAR ERROR_CMD[100] = _T(" '%s'는 실행할 수 있는 프로그램이 아닙니다. \n"); INT_PTR CmdProcessing(); TCHAR* StrLower(TCHAR*); INT_PTR _tmain(INT_PTR argc, TCHAR* argv[]) { _tsetlocale(LC_ALL, _T("Korean")); // 유니코드 한글을 입력받기 위해 INT_PTR isExit; while(TRUE) // 무한루프 { isExit = CmdProcessing(); if(isExit == TRUE) { _tprintf(_T("종료합니다. \n")); break; } } return 0; } TCHAR cmdString[STR_LEN] = {0}; TCHAR CmdTokenList[CMD_TOKEN_NUM][STR_LEN]; TCHAR seps[] = _T(" , \t \n"); INT_PTR CmdProcessing() // 명령어 입력받아서 해당 명령어 기능 수행 함수 { _tprintf(_T("Command Prompt >> ")); _tscanf(_T("%s"), cmdString); // 명령어 입력받음 TCHAR* token = _tcstok(cmdString, seps); // 명령어를 분리함, ex) copy a b -> copy, a, b INT_PTR tokenNum = 0; while(token != NULL) { _tcscpy(CmdTokenList[tokenNum++], StrLower(token)); // 분리된 문자열이 없을때까지 // 모두 소문자로 변경한 명령어를 붙여넣음 token = _tcstok(NULL, seps); } if(!_tcscmp(CmdTokenList[0], _T("exit"))) { return TRUE; } else if(!_tcscmp(CmdTokenList[0], _T("추가명령어"))) // 명령어가 개수만큼 else if 추가 { } else // 해당명령어가 없으면 에러출력 { _tprintf(ERROR_CMD, CmdTokenList[0]); } return 0; } TCHAR* StrLower(TCHAR* pStr) // 대문자 -> 소문자 (대소문자 구별없게 하기 위해서) { TCHAR* ret = pStr; while(*pStr) // NULL 만날때까지 반복, { if(_istupper(*pStr)) // 대문자이면 { *pStr = _tolower(*pStr); // 소문자로 변경 } pStr++; } return ret; }