조회 수 53081 댓글 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
번호 분류 제목 날짜 조회 수 추천 수
491 Android adb shell로 db 업데이트하기 1 secret 2016.03.28 0 0
490 Android ADB Usage 번역 2013.07.10 13367 0
489 Android adb 로 low battery 이벤트 날리기 2013.04.19 16859 0
488 Android adb 를 이용한 터치 이벤트 보내기 2014.07.30 9357 0
487 Android ADB 에서 cpu 사용률 보기 2013.04.29 20242 0
486 Android adb로 db보기 2012.08.31 16546 0
485 Android adb로 display 해상도 조정 2015.04.22 10321 0
484 Android ADB로 스크린 캡쳐하여 저장하는 방법 2013.08.13 45641 0
483 Android adb로 폰 화면 동영상 저장 - KK 전용 2013.12.17 14102 0
482 Android Android Animation Interpolator(보간기) 종류 2020.12.01 5089 0
481 Android Android Animation XML 사용 2020.12.01 3572 0
480 Android Android C, C++ 레벨에서 call stack 보기 file 2014.02.25 18663 0
479 개념 Android CTS(Android Compatibility Test Suite) 2012.02.15 17264 0
478 Android Android DB 생성 및 관리 ( Cursor , Query ) 2015.03.03 23956 0
477 Android Android Framework 분석을 위한 C++ 강의노트 secret 2014.07.25 0 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