WSP14

LJM·2023년 7월 28일
0

컴퓨터지식

목록 보기
15/41

예제를 통한 CreateProcess 함수의 이해


AdderProcess.cpp
Program Description: A program that adds arguments to the main function
*/

#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int _tmain(int argc, TCHAR* argv[]) 
{

	DWORD val1, val2;

	val1 = _ttoi(argv[1]);
	val2 = _ttoi(argv[2]);

	_tprintf(_T("%d + %d = %d \n"), val1, val2, val1 + val2);
	+
		_gettchar(); //return 0 to temporarily pause the execution of the program;

	return 0;
}


위에서 만든 프로그램을 바로가기를 통해서 인자를 전달해서 실행하였고 출력된 결과이다.

다음 예제는 위에서 제시한 프로그램을 실행시키기 위한 프로그램이다

#include <stdio.h>
#include <tchar.h>
#include <windows.h>

#define DIR_LEN MAX_PATH+1

int _tmain(int argc, TCHAR* argv[]) 
{

	STARTUPINFO si = { 0, };
	PROCESS_INFORMATION pi;

	si.cb = sizeof(si);
	si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE;
	si.dwX = 100;
	si.dwY = 200;
	si.dwXSize = 300;
	si.dwYSize = 200;
	wchar_t title[] = L"I am a boy!";
	si.lpTitle = title;

	TCHAR command[] = _T("adder.exe 10 20");
	TCHAR cDir[DIR_LEN];
	BOOL state;

	GetCurrentDirectory(DIR_LEN, cDir);
	_fputts(cDir, stdout);
	_fputts(_T("\n"), stdout);

	SetCurrentDirectory(_T("C:\\WinSystem"));

	GetCurrentDirectory(DIR_LEN, cDir);
	_fputts(cDir, stdout);
	_fputts(_T("\n"), stdout);

	state = CreateProcess(
		NULL,
		command,
		NULL, NULL, TRUE,
		CREATE_NEW_CONSOLE,
		NULL, NULL, &si, &pi);

	if (state != 0)
		_fputts(_T("Creation OK! \n"), stdout);
	else
		_fputts(_T("Creation Error! \n"), stdout);

	return 0;

}

실행파일이름: CreateProcess.exe


코드 실행결과이다

코드를 보면 adder.exe를 프로세스로 생성하고 자기자신은 종료되고 있다

프로세스생성1단계: STARTUPINFO 구조체변수생성및초기화

프로세스생성2단계: 현재디렉터리설정
현재 디렉터리는 특정 파일을 찾을 경우에 기본이 되는 디렉터리이다
파일이름만 API함수에 인자로 전달할 경우 현재디렉터리를 기준으로 파일을 찾게된다
일반적으로 프로세스가 생성되면 프로세스의 현재 디렉터리는 프로세스의 실행파일이 존재하는 디렉터리로 설정된다

profile
게임개발자 백엔드개발자

0개의 댓글