조회 수 52869 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files
종종 dos 커맨드를 사용하기 위해서 system 함수를 쓸 일이 있다. 하지만 system 함수
를 사용하게 되면 command 창이 떠서 해당 결과를 출력해 버린다. 결과가 없는 경우라 
하더라고 command 창이 떴다 사라지기 때문에 이상하게 보일 수 있다. 

이럴때, command 출력을 리디렉션 시키는 방법을 사용하면 손쉽게 문제를 해결 할 수 
있다. 아래 함수가 그러한 역할을 한다. lpszCmd로 전송된 커맨드를 실행시키고, 
lpszBuffer에 결과를 담아준다. 


01: BOOL CmdRun(LPSTR lpszCmd, LPSTR *lpszBuffer) 
02: { 
03:     PROCESS_INFORMATION pi; 
04:     STARTUPINFO si; 
05:     BOOL bCreated = FALSE; 
06:     SECURITY_ATTRIBUTES sa; 
07:     
08:     memset(&pi, 0, sizeof(PROCESS_INFORMATION)); 
09:     memset(&si, 0, sizeof(STARTUPINFO)); 
10:     memset(&sa, 0, sizeof(SECURITY_ATTRIBUTES)); 
11:     
12:     sa.nLength = sizeof(SECURITY_ATTRIBUTES); 
13:     sa.bInheritHandle = TRUE; 
14:     char szCmdOut[255]; 
15:     sprintf(szCmdOut, "c:\\cmd%ld_out.txt", GetCurrentThreadId()); 
16:     HANDLE hFile = CreateFile(szCmdOut, GENERIC_WRITE, 0, &sa, CREATE_ALWAYS , 
17:         FILE_ATTRIBUTE_NORMAL, NULL); 
18:     if( hFile == INVALID_HANDLE_VALUE ) 
19:     { 
20:         printf("CreateFile cmd_out.txt failed\n"); 
21:         return FALSE; 
22:     } 
23:     
24:     char szCmd[255]; 
25:     sprintf(szCmd, "c:\\cmd%ld.cmd", GetCurrentThreadId()); 
26:     HANDLE hCmdFile = CreateFile(szCmd, GENERIC_WRITE, 0, &sa, CREATE_ALWAYS , 
27:         FILE_ATTRIBUTE_NORMAL, NULL); 
28:     if( hCmdFile == INVALID_HANDLE_VALUE ) 
29:     { 
30:         printf("CreateFile cmd.cmd failed\n"); 
31:         return FALSE; 
32:     } 
33:     DWORD dwSize = 0; 
34:     WriteFile(hCmdFile, lpszCmd,strlen(lpszCmd), &dwSize,NULL); 
35:     CloseHandle(hCmdFile); 
36:     
37:     si.cb = sizeof(STARTUPINFO); 
38:     si.dwFlags = STARTF_USESTDHANDLES; 
39:     si.hStdOutput = hFile; 
40:     si.hStdInput = hFile; 
41:     si.hStdError = hFile; 
42:     
43:     bCreated = CreateProcess(NULL, szCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); 
44:     if( bCreated==FALSE ) 
45:     { 
46:         printf("CreateProcess failed\n"); 
47:         return FALSE; 
48:     } 
49:     WaitForSingleObject(pi.hProcess, INFINITE); 
50:     CloseHandle(pi.hProcess); 
51:     CloseHandle(pi.hThread); 
52:     CloseHandle(hFile); 
53:     
54:     HANDLE hReadCmdFile = CreateFile(szCmdOut, GENERIC_READ, 0, &sa, 
55:         OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
56:     dwSize=GetFileSize(hReadCmdFile,NULL); 
57:     
58:     *lpszBuffer = new char[dwSize+1]; 
59:     memset(*lpszBuffer, 0, dwSize); 
60:     DWORD dwRead = 0; 
61:     ReadFile(hReadCmdFile,*lpszBuffer,dwSize,&dwRead,NULL); 
62:     *(*lpszBuffer+dwRead) = 0; 
63: 
64:     CloseHandle(hReadCmdFile); 
65:     
66:     DeleteFile(szCmd); 
67:     DeleteFile(szCmdOut); 
68:     
69:     return TRUE; 
70: }
아래와 같이 사용하면 된다.

TCHAR *buffer; 

CmdRun("dir", &buffer); 
printf("%s", buffer); 
CmdRun("ping 168.126.63.1", &buffer); 
printf("%s", buffer);

Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
431 Pi 아두이노 레오나르도 보드 기본 사용법 2016.11.22 11532 0
430 Pi 아두이노 데이터 저장하기(Arduino EEPROM 사용하기) 2019.12.24 17495 0
429 Pi 아두이노 Arduino String Class 2017.07.16 10175 0
428 Pi 아두이노 (Arduino)로 서보모터 (SG90) 제어 2017.07.11 10840 0
427 Pi 아두이노 (Arduino) 소개 및 유형별 종류, 제품별 특징 2016.11.15 6921 0
426 Android 실시간으로 폰의 pcap 보기 2016.01.05 7171 0
425 Pi 시프트 레지스터 사용방법 (Shift Register, 74HC595, 74HC165) 2016.11.21 31404 0
424 MFC 시작프로그램 레지스트리에 등록/해제 함수 2006.04.14 45687 0
423 일반 시스템 환경변수 세팅 2011.02.08 28277 0
» MFC 시스템 출력 리디렉션 - 도스 커맨드 결과 받아오기 file 2007.08.14 52869 0
421 개념 스트리밍 개요 Streaming overview 2012.11.26 13872 0
420 C 쉘 정렬 Shell Sort file 2005.08.10 33149 0
419 일반 소스코드 게시판입니다. 2005.07.29 45768 0
418 C 선택정렬 Selection Sort file 2005.08.10 34149 0
417 LINUX 서버간 폴더 또는 파일을 이동 하는 scp 명령어 2012.06.27 26025 0
목록
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 10 ... 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5