조회 수 53385 댓글 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 [Git] git add 취소하기, git commit 취소하기, git push 취소하기 2021.09.30 5990 0
490 일반 엑셀 Excel 데이터 시각화 (엑셀 사용 Tip) 2021.08.25 3175 0
489 Android 안드로이드 스마트 폰 화면 미러링: scrcpy 사용법 2021.08.18 38171 0
488 일반 Cakewalk 단축키 정리 2021.07.20 4419 0
487 일반 Cakewalk secret 2021.07.20 0 0
486 C# C# JSON 파싱(parsing): Newtonsoft 및 System.Text.Json 2021.05.15 11407 0
485 C# C# ?? 및 ??=, ?. 연산자 2021.05.09 3537 0
484 Android Android Animation Interpolator(보간기) 종류 2020.12.01 5425 0
483 Android Android Animation XML 사용 2020.12.01 3896 0
482 Pi 라즈베리파이 웹페이지 자동 실행 설정 방법 secret 2020.11.03 0 0
481 PHP [PHP] .php 확장자 없이 URL 접속하기 2020.10.26 5112 0
480 Android 안드로이드 국가별 언어코드 2020.10.06 5017 0
479 Android Android Studio 안드로이드 스튜디오 단축키 2020.03.16 3946 0
478 일반 전기적 스펙에 관한 용어, 약자 정리 2020.02.24 5351 0
477 PHP SQL 일정 시간단위로 데이터 검색하기 2020.02.12 5385 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