시스템 프로그래밍

8-1. 프로세스 환경변수

CalebHong 2022. 5. 20. 10:41

프로세스 환경변수의 구성

환경변수 데이터를 저장하는 함수 : SetEnvironmentVariable("Key", "Value");

환경변수 데이터를 가져오는 함수 : GetEnvironmentVariable("Key", 반환할 포인터 변수,);

 

* 환경변수 테이블은 자식 프로세스에게 복사하여 보낼 수 있음

 

ex) EnvParent.cpp

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

int _tmain(int argc, TCHAR* argv[])
{
	SetEnvironmentVariable(_T("Good"), _T("morning"));
    SetEnvironmentVariable(_T("Hey"), _T("Ho!"));
    SetEnvironmentVariable(_T("Big"), _T("Boy"));
    
    STARTUPINFO si = {0,};
    PROCESS_INFORMATION pi = {0,};
    si.cb = sizeof(si);
    
    CreateProcess (
    	NULL, _T("EnvChild"), NULL, NULL, FALSE,
        CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,
        NULL, // NULL인 경우 부모 프로세스의 환경 변수 테이블을 자식 프로세스에게 그대로 등록
        NULL, &si, &pi
    );
    
    CloseHandle(pi.hProcess);
    CloseHandle(ph,hThread);
    return 0;
}

ex) EnvChild.cpp

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

#define BUFFSIZE 1024

int _tmain2(int argc, TCHAR* argv[])
{
	TCHAR value[BUFFSIZE];
    
    if (GetEnvironmentVariable(_T("Good"), value, BUFFSIZE) > 0)
    	_tprintf(_T("[%s = %s] \n"), _T("Good"), value)
        
    if (GetEnvironmentVariable(_T("Hey"), value, BUFFSIZE) > 0)
    	_tprintf(_T("[%s = %s] \n"), _T("Hey"), value)
        
    if (GetEnvironmentVariable(_T("Big"), value, BUFFSIZE) > 0)
    	_tprintf(_T("[%s = %s] \n"), _T("Big"), value)
    
    Sleep(10000);
    
    return 0;
}

 - 자식 프로세스에게 환경 변수 테이블이 그대로 상속되어 보여짐