System Programming
- OS의 자체 기능을 추가 제작하는 프로그래밍
- OS를 활용하는 프로그래밍
Process 생성
- CreateProcessW(), CreateProcessA()
W는 유니코드, A는 아스키코드
윈도우는 유니코드를 사용하기 때문에 CreateProcess()는 W를 의미
A도 결국 유니코드로 변환해서 사용
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
TCHAR szBuffer[MAX_PATH + _MAX_FNAME] = {L"notepad.exe"}; -> Read, Write가 되는 스택 메모리(지역 변수)
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line)
szBuffer, // Command line -> 여기서 Write가 일어남, Read만 되는 문자열 상수가 오면 안됨
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
CString strTmp;
strTmp.Format(L"CreateProcess failed (%d).", GetLastError());
AfxMessageBox(strTmp);
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
- GetLastError()의 값은 도구 - 오류 조회에서 어떤 오류인지 확인 가능
Reference
'💻 Computer Science > System' 카테고리의 다른 글
[System] High-Level File I/O (1) | 2024.01.24 |
---|---|
[System] Low-Level File I/O (1) | 2024.01.23 |
[System] Thread (0) | 2024.01.04 |
[System] Event (0) | 2024.01.03 |
[System] WaitForSingleObject (0) | 2024.01.03 |