조회 수 53423 댓글 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
번호 분류 제목 날짜 조회 수 추천 수
461 일반 엑셀 Excel 데이터 시각화 (엑셀 사용 Tip) 2021.08.25 3209 0
460 C# C# ?? 및 ??=, ?. 연산자 2021.05.09 3558 0
459 Android Android Animation XML 사용 2020.12.01 3920 0
458 Android Android Studio 안드로이드 스튜디오 단축키 2020.03.16 3972 0
457 Pi 레귤레이터(3.3V 1A) KA78R33 데이터시트 file 2019.08.20 4253 0
456 LINUX Ubuntu apt-get 명령어 정리 2020.02.11 4351 0
455 C# C#의 $으로 문자열 보간하기 2022.04.28 4386 0
454 일반 Cakewalk 단축키 정리 2021.07.20 4459 0
453 Android 안드로이드 국가별 언어코드 2020.10.06 5048 0
452 PHP [PHP] .php 확장자 없이 URL 접속하기 2020.10.26 5142 0
451 Pi Teensy 3.5 spec & pin 2017.07.12 5297 0
450 일반 날씨정보 rss 2018.03.08 5318 0
449 일반 전기적 스펙에 관한 용어, 약자 정리 2020.02.24 5386 0
448 JAVA Timer 사용하기 - Timer, TimerTask 2017.12.23 5411 0
447 PHP SQL 일정 시간단위로 데이터 검색하기 2020.02.12 5413 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