*유니코드기반의함수들
SBCS 함수 |
WBCS 기반의 문자열 조작 함수 |
strlen |
size_t wcslen(const wchar_t* string); |
Strcpy |
wchar_t* wcscpy(wchar_t* dest,const wcahr_t* src) |
strncpy |
wchar_t* wcsncpy(wchar_t* dest,const wchar_t* src, size_t cnt) |
strcat |
wchar_t* wcscat(wchar_t* dest,const wchar_t* src) |
strncat |
wchar_t* wcsncat(wchar_t* dest,const wchar_t* src,size_t cnt) |
strcmp |
int wcscmp(const wchar_t* s1,const wchar_t* s2) |
Strncmp |
int wcsncmp(const wchar_t* s1,const wchar_t* s2, size_t cnt) |
* 문자열 입출력 함수
SBCS 함수 |
WBCS 기반의 문자열 입출력 함수 |
printf |
int wprintf(const wchar_t* format [,argument]..); |
scanf |
int wscanf(const wchar_t* format [,argument]..); |
fgets |
wchar_t* fgetws (wchar_t* string,int n, |
fputs |
int fputws (const wchar_t* string,FILE* stream); |
* 참고
_wsetlocale(LC_ALL,L"korean"); // #include<locale.h>
=> 유니코드기반으로한글을출력하고싶을때사용한다.
=> 위함수는각나라및지역에대한정보를설정하는데사용되는함수다.
*tchar.h 헤더파일을참고할것.
===================================================== 2 장 ========================================================================
*GetLastError()함수
=> 에러코드를 반환해 준다.
============================================5 장 =============================================================
*GetCurrentDirectory() 함수
원형 |
DWORD WINAPI GetCurrentDirectory( __in DWORD nBufferLength, __out LPTSTR lpBuffer); |
- 인자 값으로 버퍼의 길이와 버퍼의 주소를 넘겨 준다.
*SetCurrentDirecotry() 함수
원형 |
BOOL WINAPI SetCurrentDirectory( __in LPCTSTR lpPathName); |
- 인자 값으로 경로를 세팅해준다. 주소 값.
*CreateProcess() 함수
원형 |
BOOL WINAPI CreateProcess(
원본 위치 <http://msdn.microsoft.com/en-us/library/ms682425%28v=VS.85%29.aspx>
|
- 인자 값은 5장 CreateProcess판을 참고할 것!!!
*ZeroMemory() 함수
원형 |
void ZeroMemory( [in] PVOID Destination, [in] SIZE_T Length); |
-> PVOID == void*
-> ULONG_PTR == SIZE_T, *PSIZE_T;
=========================================6 장 ================================================
*SetPriorityClass() 함수
- 커널 오브젝트에 저장된 프로세스 우선순위를 높인다.
원형 |
BOOL WINAPI SetPriorityClass( __in HANDLE hProcess, __in DWORD dwPriorityClass); |
- 핸들 값과 , 높일 우선순위가 넘어간다.
*GetCurrentProcess() 함수
- 현재 프로세스의 핸들 정보가 반환 된다.
원형 |
HANDLE WINAPI GetCurrentProcess(void); |
*CloseHandle() 함수
- 핸들 테이블의 핸들을 제거 해주고 커널 오브젝트의 UC를 줄여준다.
원형 |
BOOL WINAPI CloseHandle( __in HANDLE hObject); |
*TerminateProcess() 함수
- 강제로 종료를 요청하는 함수
- 되도록이면 안 쓰는 것이 좋다.
원형 |
BOOL WINAPI TerminateProcess( __in HANDLE hProcess, __in UINT uExitCode); |
================================================7 장 =================================================
*CreateMailslot() 함수
- 메일 슬롯 생성.
원형 |
HANDLE WINAPI CreateMailslot( __in LPCTSTR lpName, __in DWORD nMaxMessageSize, __in DWORD lReadTimeout, __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes ); |
-> lpName: 생성하는 메일슬롯의 이름을 결정
-> nMaxMessageSize: 메일슬롯의 버퍼 크기를 지정. 0이 전달되면 시스템이 허용하는 최대 크기로 지정.
-> lReadTimeout: 메일슬롯을 통해 전송된 데이터를 읽기 위해서 파일 입출력 함수인 ReadFile 함수가 사용되는데 메일 슬롯이 비어 있다면 데이터가 채워질 때 까지 blocking을 하게 되
데 최대 블로킹 시간을 정해준다. MAILSLOT_WAIT_FOREVER를 인자로 전달하면 무한 블로킹. 0 일 경우 그냥 빠져 나옴.
-> lpSecurityAttributes: 핸들을 상속하기 위한 용도.
*WaitForSingleObject() 함수
- 커널 오브젝트의 상태를 확인할 수 있음.
- Signaled 상태가 되었을 때 반환된다.
- 뮤텍스를 얻을 때에도 쓴다.
원형 |
DWORD WINAPI WaitForSingleObject( __in HANDLE hHandle, __in DWORD dwMilliseconds ); |
- hHandle : 커널 오브젝트의 핸들 전달
- dwMilliseconds : 대기 시간 설정. INFINITE를 인자로 전달하면, 무한정 기다림.
- 반환 값 [표]
Return code/value |
Description |
WAIT_ABANDONED 0x00000080L |
정상적이지못한오류발생에의해서반환 |
WAIT_OBJECT_0 0x00000000L |
시그널상태였을때반환 |
WAIT_TIMEOUT 0x00000102L |
시간초과 |
WAIT_FAILED (DWORD)0xFFFFFFFF |
The function has failed. To get extended error information, call GetLastError. |
* WaitForMultipleObjects() 함수
원형 |
DWORD WINAPI WaitForMultipleObjects( __in DWORD nCount, //배열에 저장된 핸들 개수 __in const HANDLE *lpHandles, // 핸들을 저장하고 있는 배열의 주소 __in BOOL bWaitAll, // 모두 Signaled 상태가 되기(TRUE)를 기다리고자 하는지, 아니면 하나라도 Signaled 상태 반환(FALSE)인지 결정 __in DWORD dwMilliseconds //대기 시간. ); |
=> 커널 오브젝트가 둘 이상이고, 핸들이 배열로 묶여 있을 때 가능.
*GetExitCodeProcess() 함수
- 종료 코드를 가져오는 함수.
원형 |
BOOL WINAPI GetExitCodeProcess( __in HANDLE hProcess, __out LPDWORD lpExitCode ); |
========================================= 8 장 ===========================================================
*GetCurrentProcess() 함수
- 현재 프로세스의 가짜 핸들을 반환
원형 |
HANDLE WINAPI GetCurrentProcess(void); |
*DuplicateHandle() 함수
- 핸들을 복제 함
원형 |
BOOL WINAPI DuplicateHandle( __in HANDLE hSourceProcessHandle, // 복제할 핸들을 소유한 프로세스 __in HANDLE hSourceHandle, // 복제할 핸들 __in HANDLE hTargetProcessHandle, // 복제된 핸들을 소유할 프로세스 __out LPHANDLE lpTargetHandle, // 복제된 핸들 값을 저장할 변수의 주소!! __in DWORD dwDesiredAccess, // 걍 null __in BOOL bInheritHandle, //상속 여부 __in DWORD dwOptions //옵션. ); |
*CreatePipe() 함수
- 이름 없는 파이프를 생성해주는 함수
- 두 개의 핸들을 얻게 됨.
원형 |
BOOL WINAPI CreatePipe( __out PHANDLE hReadPipe, //읽는 핸들 __out PHANDLE hWritePipe, //쓰는 핸들 __in_opt LPSECURITY_ATTRIBUTES lpPipeAttributes, __in DWORD nSize ); |
*CreateNamedPipe() 함수
- 이름 있는 파이프를 생성해주는 함수
- 이름있는 파이프를 만듬.
원형 |
HANDLE WINAPI CreateNamedPipe( __in LPCTSTR lpName, // 파이프 이름 지정. 형식: \\.\pipe\pipename __in DWORD dwOpenMode, //파이프 읽기 또는 쓰기 모드 설정. __in DWORD dwPipeMode, // 모드 설정.( 데이터 전송 타입, 데이터 수신 타입, 블로킹 모드. 3가지 설정) __in DWORD nMaxInstances, // 파이프의 최대 개수 __in DWORD nOutBufferSize, // 파이프의 출력 버퍼 사이즈 __in DWORD nInBufferSize, // 입력 버퍼 사이즈 __in DWORD nDefaultTimeOut, // 만료 시간 __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes //보안 속성. ); |
*dwPipeMode에 대한 추가 설명
데이터 전송 방식 |
PIPE_TYPE_BYTE(바이트), PIPE_TYPE_MESSAGE(메시지) : 바이너리 형태로 전송할 것인지 메시지 방식으로 전송할 것 인지 선택 |
데이터 수신 방식 |
PIPE_READMODE_BYTE(바이트), PIPE_TYPE_MESSAGE(메시지) : 바이너리 방식(바이트 스트림)으로 읽을 지 메시지 방식으로 읽을지 |
함수 리턴 방식 |
PIPE_WAIT(블로킹), PIPE_NOWAIT(넌-블로킹) :무조건 PIPE_WAIT을 전달. |
*ConnectNamePipe() 함수
파이프를 연결 요청 대기 상태로 변경시킬 때 사용하는 함수.
원형 |
BOOL WINAPI ConnectNamedPipe( __in HANDLE hNamedPipe, __inout_opt LPOVERLAPPED lpOverlapped ); |
*WaitNamedPipe() 함수
- 서버의 대기 시간에 따라 클라이언트를 대기하게 끔 만들어 줌
원형 |
BOOL WINAPI WaitNamedPipe( __in LPCTSTR lpNamedPipeName, //파이프 이름 __in DWORD nTimeOut // 대기 시간 ); |
*SetNamedPipeHandleState() 함수
- 파이프의 모드를 변경시켜준다.
원형 |
BOOL WINAPI SetNamedPipeHandleState( __in HANDLE hNamedPipe, //파이프 이름 __in_opt LPDWORD lpMode, //읽기 모드와 함수 리턴방식에 대한 값을 전달. __in_opt LPDWORD lpMaxCollectionCount, //버퍼링할 수 있는 바이트 크기 __in_opt LPDWORD lpCollectDataTimeout // 버퍼링을 허용하는 최대 시간. 클라이언트와 서버가 같은 PC 상에서 동작한다면 반드시 NULL을 전달해야 한다. ); |
*FlushFileBuffers() 함수
- 파일 버퍼를 비우는 역할. 비우면서 전송하는 것?
원형 |
BOOL WINAPI FlushFileBuffers( __in HANDLE hFile ); |
*DisconnectNamedPipe() 함수
- 클라이언트가 에러 메시지를 받을 수 있도록 도와준다.
원형 |
BOOL WINAPI DisconnectNamedPipe( __in HANDLE hNamedPipe ); |
*SetEnvironmentVariable() 함수
- 환경변수에 등록한다.
원형 |
BOOL WINAPI SetEnvironmentVariable( __in LPCTSTR lpName, //Key __in_opt LPCTSTR lpValue //value ); |
*GetEnvironmentVariable() 함수
- 환경 변수를 key를 통해 value 값을 가지고 와서 버퍼에 저장한다.
원형 |
DWORD WINAPI GetEnvironmentVariable( __in_opt LPCTSTR lpName, //key __out_opt LPTSTR lpBuffer, // value가 담길 버퍼 __in DWORD nSize // 버퍼 사이즈 ); |
===================================12 장 =========================================
*CreateThread() 함수
- 쓰레드를 생성해주는 함수
원형 |
HANDLE WINAPI CreateThread( __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, //핸들의 상속여부를 결정. __in SIZE_T dwStackSize, //스택 사이즈 __in LPTHREAD_START_ROUTINE lpStartAddress, //함수 포인터 __in_opt LPVOID lpParameter, //함수 전달 인자 __in DWORD dwCreationFlags, __out_opt LPDWORD lpThreadId //쓰레드 식별자 ); |
*GetExitCodeThread() 함수
- 쓰레드 종료 시 반환 되는 값을 얻을 수 있다.
원형 |
BOOL WINAPI GetExitCodeThread( __in HANDLE hThread, __out LPDWORD lpExitCode ); |
*ExitThread() 함수
- 특정 위치에서 쓰레드의 실행을 종료
원형 |
VOID WINAPI ExitThread( __in DWORD dwExitCode ); |
- 커널 오브젝트에 등록되는 쓰레드 종료코드를 지정.
*TerminateThread() 함수
- 외부에서 쓰레드를 종료
원형 |
BOOL WINAPI TerminateThread( __inout HANDLE hThread, __in DWORD dwExitCode ); |
*_beginthreadex() 함수
- 임계영역에 접근 문제를 해결 하기 위해 독립된 메모리를 할당해준다.
원형 |
uintptr_t _beginthreadex( void *security, unsigned stack_size, unsigned ( *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr ); |
*_endthreadex() 함수
- 쓰레드에 할당된 메모리 블록을 해제하는 역할
원형 |
void _endthreadex( unsigned retval ); |
*SuspendThread() 함수
- Running 상태의 Thread를 Blocked 상태로 만들어 준다
- suspend count를 증가시키는 역할.
원형 |
DWORD WINAPI SuspendThread( __in HANDLE hThread ); |
*ResumeThread() 함수
- Blocked 상태의 Thread를 Ready 상태로 만들어 준다.
- suspend count를 감소시키는 역할
원형 |
DWORD WINAPI ResumeThread( __in HANDLE hThread ); |
*SetThreadPriority() 함수
- 쓰레드의 우선순위 세팅
원형 |
BOOL WINAPI SetThreadPriority( __in HANDLE hThread, __in int nPriority ); |
- 우선순위는 참고할 것.
*GetThreadPriority() 함수
- 쓰레드의 우선순위를 가져오는 함수
원형 |
int WINAPI GetThreadPriority( __in HANDLE hThread ); |
============================================ 13 장 ==================================================
*InitializeCriticalSection() 함수
- 크리티컬 섹션 오브젝트를 초기화 해주는 함수
원형 |
void WINAPI InitializeCriticalSection( __out LPCRITICAL_SECTION lpCriticalSection ); |
*EnterCriticalSection() 함수
- 임계영역에 접근 하기 위해서 크리티컬 섹션 오브젝트를 획득하는 함수
원형 |
void WINAPI EnterCriticalSection( __inout LPCRITICAL_SECTION lpCriticalSection ); |
*LeaveCriticalSection() 함수
- 임계영역을 빠져 나와서 크리티컬 섹션 오브젝트를 반환하는 함수
원형 |
void WINAPI LeaveCriticalSection( __inout LPCRITICAL_SECTION lpCriticalSection ); |
*DeleteCriticalSection() 함수
- 크리티컬 섹션 오브젝트의 리소스를 반환 해주는 함수,
원형 |
void WINAPI DeleteCriticalSection( __inout LPCRITICAL_SECTION lpCriticalSection ); |
-------- 위에는 크리티컬 기반의 동기화에 사용 되는 함수들 --------------
* InterlockedIncrement() 함수
- 임계영역의 값을 동기화 시키고 +1 시켜주는 함수.
원형 |
LONG __cdecl InterlockedIncrement( __inout LONG volatile *Addend ); |
*InterlockedDecrement() 함수
- 임계영역의 값을 동기화 시키고 -1 시켜주는 함수.
원형 |
LONG __cdecl InterlockedDecrement( __inout LONG volatile *Addend ); |
------- 위에는 인터락 함수를 이용한 동기화에 사용되는 함수들 -----------------------
*CreateMutex() 함수
- 뮤텍스의 커널 오브젝트의 핸들 값을 반환 한다.
원형 |
HANDLE WINAPI CreateMutex( __in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes, __in BOOL bInitialOwner, __in_opt LPCTSTR lpName ); |
*ReleaseMutex() 함수
- 뮤텍스를 Signaled 상태로 만들어 주는 함수
원형 |
BOOL WINAPI ReleaseMutex( __in HANDLE hMutex ); |
*OpenMutex() 함수
- 이름있는 뮤텍스의 핸들을 가져 온다.
원형 |
HANDLE WINAPI OpenMutex( __in DWORD dwDesiredAccess, //뮤텍스로의 접근권한을 지정. __in BOOL bInheritHandle, // 핸들 상속. __in LPCTSTR lpName //뮤텍스의 이름. ); |
========================================== 14 장 =========================================================
*CreateEvent() 함수
- 이벤트 오브젝트를 생성하는데 사용 되는 함수.
원형 |
HANDLE WINAPI CreateEvent( __in_opt LPSECURITY_ATTRIBUTES lpEventAttributes, __in BOOL bManualReset, // 수동 리셋(TRUE), 자동리셋(FALSE) __in BOOL bInitialState, //signaled=TRUE, non-signaled=FALSE __in_opt LPCTSTR lpName ); |
*ResetEvent() 함수
- 수동으로 이벤트 오브젝트를 non-signaled로 바꿔 줄 때 사용
원형 |
BOOL WINAPI ResetEvent( __in HANDLE hEvent ); |
*SetEvent() 함수
- 이벤트 오브젝트를 signaled 상태로 바꿔 줄 때 사용.
원형 |
BOOL WINAPI SetEvent( __in HANDLE hEvent ); |
*CreateWaitableTimer() 함수
- 타이머 오브젝트를 생성해주는 함수.
- 타이머 오브젝트는 무조건 non-signaled 상태로 생성된다.
원형 |
HANDLE WINAPI CreateWaitableTimer( __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes, __in BOOL bManualReset, __in_opt LPCTSTR lpTimerName ); |
*SetWaitableTimer() 함수
- signaled로 바꿀 타이머 설정하는 함수.
원형 |
BOOL WINAPI SetWaitableTimer( __in HANDLE hTimer, __in const LARGE_INTEGER *pDueTime, __in LONG lPeriod, __in_opt PTIMERAPCROUTINE pfnCompletionRoutine, __in_opt LPVOID lpArgToCompletionRoutine, __in BOOL fResume ); |
===================================== 17 장 ========================================
*RaiseException() 함수
- 소프트웨어 예외를 발생시키는 역할.
원형 |
void WINAPI RaiseException( __in DWORD dwExceptionCode, // 발생시킬 예외의 형태를 지정 __in DWORD dwExceptionFlags, // 예외발생 이후의 실행방식에 있어서 제한을 둘 때 사용한다. __in DWORD nNumberOfArguments, // 추가정보의 개수를 지정한다. __in const ULONG_PTR *lpArguments // 추가정보를 전달한다. ); |
1. dwExceptionCode에 대한 설명
=> dwExeptionCode에서 bit 단위 별 의미.
=> C: 커스텀 or Microsoft
=> R: Reserved
=> Sev: 심각 정도. 이건 표 참고(p571)
=> Code: Exception Code를 의미
2. dwExecptionFlags에 대한 설명
- EXEPTION_CONTINUE_EXECUTION을 넘겨 주면 EXECTION_CONTINUEW_EXECUTION의 예외처리 흐름을 막는 용도로 사용된다.
======================================== 18 장 ======================================
* CreateFile() 함수
- 파일을 생성하거나 열 때 핸들 값을 얻어오는 함수.
원형 |
HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, //파일 이름. __in DWORD dwDesiredAccess, // 읽기/쓰기 모드. __in DWORD dwShareMode, // 파일 공유 방식 지정. __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 보안 속성. __in DWORD dwCreationDisposition, // 파일이 생성 되는 방법. __in DWORD dwFlagsAndAttributes, // 파일의 특성 정보를 설정. __in_opt HANDLE hTemplateFile // 기존에 존재하는 파일과 동일한 특성을 가지는 새 파일을 만들 때 사용. ); |
-> 기타 속성 값은 MSDN을 참고 할 것.
*ReadFile() 함수
- 파일에 데이터를 읽을 때 사용하는 함수
원형 |
BOOL WINAPI ReadFile( __in HANDLE hFile, //읽을 파일 핸들 __out LPVOID lpBuffer, //읽은 데이터를 저장할 버퍼의 주소 값. __in DWORD nNumberOfBytesToRead, // 읽어 들일 데이터의 크기 __out_opt LPDWORD lpNumberOfBytesRead, // 읽어 들인 데이터의 크기의 변수 주소 값. __inout_opt LPOVERLAPPED lpOverlapped // ); |
*WriteFile() 함수
- 파일에 데이터를 쓸 때 사용하는 함수
원형 |
BOOL WINAPI WriteFile( __in HANDLE hFile, __in LPCVOID lpBuffer, __in DWORD nNumberOfBytesToWrite, __out_opt LPDWORD lpNumberOfBytesWritten, __inout_opt LPOVERLAPPED lpOverlapped ); |
*GetFiletime() 함수
- MAC 타임을 얻기 위한 함수.
- FILETIME 구조체는 시간 정보를 나타내는 8바이트 자료형. UTC 기반으로 시간을 표현해 준다.
원형 |
BOOL WINAPI GetFileTime( __in HANDLE hFile, __out_opt LPFILETIME lpCreationTime, __out_opt LPFILETIME lpLastAccessTime, __out_opt LPFILETIME lpLastWriteTime ); |
* FileTimeToSystemTime() 함수
- 시간 포멧을 변경해준다.
원형 |
BOOL WINAPI FileTimeToSystemTime( __in const FILETIME *lpFileTime, __out LPSYSTEMTIME lpSystemTime ); |
* 시간 포멧 변경 시 필요한 구조체.
typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME; |
*SystemTimeToTzSpecificLocalTime() 함수
- UTC를 지역별, 국가별 시간대로 변경해준다.
원형 |
BOOL WINAPI SystemTimeToTzSpecificLocalTime( __in_opt LPTIME_ZONE_INFORMATION lpTimeZone, //시간대에 대한 정보.NULL 전달 시 현재 시스템의 시간대 정보가 기준이 된다. __in LPSYSTEMTIME lpUniversalTime, __out LPSYSTEMTIME lpLocalTime ); |
*GetFileSize() 함수
- file사이즈를 가져오는 함수
- 4G이상은 불가.
원형 |
DWORD WINAPI GetFileSize( __in HANDLE hFile, __out_opt LPDWORD lpFileSizeHigh ); |
*GetFileSizeEx() 함수
-4G 이상의 파일 사이즈를 얻어주는 함수
원형 |
BOOL WINAPI GetFileSizeEx( __in HANDLE hFile, __out PLARGE_INTEGER lpFileSize ); |
-> LARGE_INTEGER 구조체에는 8Byte를 상하위 비트로 나누어서 담는다.
*GetFileAttributes() 함수
- 파일 특성 정보는 반환 값으로 담긴다.
원형 |
DWORD WINAPI GetFileAttributes( __in LPCTSTR lpFileName ); |
- 32 bit DWORD 값에 비트 별로 속성 값이 들어 가게 된다. 총 12가지 정보가 들어간다.
- 비트 별 정보는 msdn을 참고할 것!
*SetFileAttributes() 함수
- 파일 특성 정보를 세팅한다
원형 |
BOOL WINAPI SetFileAttributes( __in LPCTSTR lpFileName, __in DWORD dwFileAttributes ); |
*GetFileInformationByHandle() 함수
- 핸들을 이용해 파일 정보를 얻어오는 함수
원형 |
BOOL WINAPI GetFileInformationByHandle( __in HANDLE hFile, __out LPBY_HANDLE_FILE_INFORMATION lpFileInformation ); |
*_BY_HANDLE_FILE_INFORMATION의 원형
typedef struct _BY_HANDLE_FILE_INFORMATION { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD dwVolumeSerialNumber; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD nNumberOfLinks; DWORD nFileIndexHigh; DWORD nFileIndexLow; } BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION; |
*GetFullPathName() 함수
- 파일 이름을 통해서 파일경로 정보를 얻어주는 함수
원형 |
DWORD WINAPI GetFullPathName( __in LPCTSTR lpFileName, __in DWORD nBufferLength, //저장 가능한 문자열의 길이임을 주의할 것!! __out LPTSTR lpBuffer, __out LPTSTR *lpFilePart //버퍼의 특정 위치를 가리키는 포인터 값이 저장. 마지막 역슬래시 다음 번지 주소 값이 저장됨. ); |
*SetFilePointer() 함수
- 파일 포인터의 위치를 정해준다.
원형 |
DWORD WINAPI SetFilePointer( __in HANDLE hFile, __in LONG lDistanceToMove, //32bit 기반일 때 이 인자 값만 사용. 이동시킬 거리를 지정. __inout_opt PLONG lpDistanceToMoveHigh, //64bit 기반일 때 상위 4Byte 값이 담긴다. 32bit에서는 NULL 전달. __in DWORD dwMoveMethod ); |
*CreateDirectory() 함수
- 디렉터리 생성.
원형 |
BOOL WINAPI CreateDirectory( __in LPCTSTR lpPathName, __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes ); |
*RemoveDirectory() 함수
- 디렉토리 제거
원형 |
BOOL WINAPI RemoveDirectory( __in LPCTSTR lpPathName ); |
*GetCurrentdirectory() 함수
- 현재 디렉토리를 얻어온다.
원형 |
DWORD WINAPI GetCurrentDirectory( __in DWORD nBufferLength, __out LPTSTR lpBuffer ); |
*SetCurrentDirectory() 함수
- 현재 디렉토리 위치를 변경한다.
원형 |
BOOL WINAPI SetCurrentDirectory( __in LPCTSTR lpPathName ) |
* GetSystemDirectory() 함수
- 시스템 디렉터리의 위치를 얻어온다.
원형 |
UINT WINAPI GetSystemDirectory( __out LPTSTR lpBuffer, __in UINT uSize ); |
*GetWindowsDirectory() 함수
- window 디렉토리의 위치를 얻어온다
원형 |
UINT WINAPI GetWindowsDirectory( __out LPTSTR lpBuffer, __in UINT uSize ); |
*SearchPath() 함수
- 파일의 위치를 찾아준다.
원형 |
DWORD WINAPI SearchPath( __in_opt LPCTSTR lpPath, __in LPCTSTR lpFileName, __in_opt LPCTSTR lpExtension, __in DWORD nBufferLength, __out LPTSTR lpBuffer, __out_opt LPTSTR *lpFilePart ); |
-> 표준 검색 경로
1. 실행 중인 프로그램이 로드 된 디렉토리
2. 현재 디렉토리
3. 시스템 디렉토리
4. windows 디렉토리
5. 환경변수 PATH에 등록된 디렉토리
*FindFirstFile() 함수
- 파일 목록 중 첫 번째 파일의 핸들 값을 반환. 정보는 두 번째 인자에 저장.
원형 |
HANDLE WINAPI FindFirstFile( __in LPCTSTR lpFileName, __out LPWIN32_FIND_DATA lpFindFileData ); |
*FindNextFile() 함수
- 파일 목록 중 다음 파일의 핸들 값을 반환. 정보는 두 번째 인자에 저장.
원형 |
BOOL WINAPI FindNextFile( __in HANDLE hFindFile, __out LPWIN32_FIND_DATA lpFindFileData ); |
*FindClose() 함수
- 생성된 커널 오브젝트를 해제.
원형 |
BOOL WINAPI FindClose( __inout HANDLE hFindFile ); |
*파일 정보 저장되는 구조체.
typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; } WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA; |
================================================ 19 장 =====================================
*GetOverlappedResult() 함수
- I/O 연산이 완료된 이후에 전송된 데이터 크기 확인을 위함.
원형 |
BOOL WINAPI GetOverlappedResult( __in HANDLE hFile, // 입력 및 출력 결과 학인을 위한 파이프 핸들 __in LPOVERLAPPED lpOverlapped, // overlapped 구조체 변수의 주소 값 __out LPDWORD lpNumberOfBytesTransferred, // 실제 전송이 완료된 바이트 크기를 얻기 위한 변수의 주소 값 __in BOOL bWait // I/O 연산이 끝나지 않은 상황에서의 처리를 결정. ); |
*WriteFileEx() 함수
- 완료 루틴이 추가 됨.
원형 |
BOOL WINAPI WriteFileEx( __in HANDLE hFile, __in_opt LPCVOID lpBuffer, __in DWORD nNumberOfBytesToWrite, __inout LPOVERLAPPED lpOverlapped, __in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine //완료 루틴. ); |
*ReadFileEx() 함수
- 완료 루틴이 추가 됨
원형 |
BOOL WINAPI ReadFileEx( __in HANDLE hFile, __out_opt LPVOID lpBuffer, __in DWORD nNumberOfBytesToRead, __inout LPOVERLAPPED lpOverlapped, __in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); |
*OVERLAPPED_COMPLETION_ROUTINE 함수 포인터 모양.
원형 |
typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE) ( [in] DWORD dwErrorCode, [in] DWORD dwNumberOfBytesTransfered, [in] LPVOID lpOverlapped ); |
*SetWaitableTimer() 함수
- 완료 루틴 타이머. 일정 시간이 되면 콜백함수를 호출한다.
원형 |
BOOL WINAPI SetWaitableTimer( __in HANDLE hTimer, __in const LARGE_INTEGER *pDueTime, __in LONG lPeriod, __in_opt PTIMERAPCROUTINE pfnCompletionRoutine, __in_opt LPVOID lpArgToCompletionRoutine, __in BOOL fResume ); |
* SetWaitableTimer 함수의 네 번째 인자 값.
원형 |
VOID CALLBACK TimerAPCProc( __in_opt LPVOID lpArgToCompletionRoutine, __in DWORD dwTimerLowValue, __in DWORD dwTimerHighValue ); |
*QueueUserAPC() 함수
- APC Queue에 호출하고자 하는 함수 정보를 전달 할 때 사용하는 함수
원형 |
DWORD WINAPI QueueUserAPC( __in PAPCFUNC pfnAPC, //비동기로 호출될 함수를 지정 __in HANDLE hThread, // APC Queue를 소유하는 쓰레드 핸들을 지정. __in ULONG_PTR dwData // 등록된 함수 호출 시 전달할 인자. ); |
========================================== 20 장 =================================================
*VirtualAlloc() 함수
- 가상 메모리를 할당해주는 함수
- MEM_RESERVE 와 MEM_COMMIT으로 메모리의 상태를 설정해줄 수 있다.
원형 |
LPVOID WINAPI VirtualAlloc( __in_opt LPVOID lpAddress, //메모리의 시작 주소. NULL 전달시 임의의 주소 할당됨. __in SIZE_T dwSize, //할당하고자 하는 메모리의 크기를 바이트 단위로. __in DWORD flAllocationType, //메모리 할당의 타입을 결정. MEM_RESERVE, MEM_COMMIT __in DWORD flProtect //페이지별 접근방식에 제한을 두는 용도로 사용. ); |
*VirtualFree() 함수
- 할당한 메모리를 해제 해주는 함수.
원형 |
BOOL WINAPI VirtualFree( __in LPVOID lpAddress, __in SIZE_T dwSize, __in DWORD dwFreeType //MEM_DECOMMIT과 MEM_RELEASE 를 전달. ); |
*HeapCreate() 함수
- 힙을 생성하는 함수
원형 |
HANDLE HeapCreate( DWORD flOptions, // 생성되는 힙의 특성을 부여 (0 을 전달시 가장 일반적인 힙 생성) // HEAP_GENERATE_EXCEPTIONS : 오류 발생시 NULL이 아닌 예외 발생 // HEAP_NO_SERIALIZE : 생성된 힙의 메모리 할당과 해제에 대해 동기화 처리를 하지 않는다. SIZE_T dwInitialSize, // dwMaximumSize 에서 지정한 메모리 중에서 초기에 할당할 COMMIT 페이지를 지정한다 SIZE_T dwMaximumSize // 생성되는 힙의 크기 결정. // 지정하는 크기에 해당하는 페이지의 수만큼 RESERVE 상태가 된다. // 0이 아닐 경우 힙은 증가 가능 한 메모리(Growable Heap)가 된다 ); |
*HeapDestroy() 함수
- 힘을 해제시키는 함수
원형 |
BOOL HeapDestroy( HANDLE hHeap // 반환하고자 하는 힙의 핸들 ); 출처http://dakuo.tistory.com/128
|
*HeapAlloc() 함수
- 힙에 메모리를 할당하는 함수.
- 요청 크기에 해당하는 페이지 수만큼 COMMIT 상태로 변경시킨다.
원형 |
LPVOID HeapAlloc( HANDLE hHeap, // 메모리 할당이 이뤄질 힙의 핸들 DWORD dwFlags, // HEAP_GENERATE_EXCEPTIONS : 오류 발생시 NULL이 아닌 예외 발생 // HEAP_NO_SERIALIZE : 함수 호출 시 동기화 처리되지 않는다. // (HeapCreate 함수호출에서 지정했다면 중복 지정 할 필요는 없다) // HEAP_ZERO_MEMORY : 할당된 메모리는 0으로 초기화 // 둘 이상의 속성을 비트 단위 연산자 OR( | )로 동시 지정 가능 SIZE_T dwBytes // 할당하고자 하는 메모리의 크기를 지정 // (증가 가능 한 힙이 아닐 경우 최대 크기 0x7FFF8) ); |
*HeapFree() 함수
- 힙에 메모리를 해제하는 함수
- Reserve 상태도 가능
원형 |
BOOL HeapFree( HANDLE hHeap, // 해제할 메모리를 담고 있는 힙을 지정 DWORD dwFlags, // HEAP_NO_SERIALIZE 가 인자로 올 수 있다, 일반적 : 0 // (HeapCreate 함수호출에서 지정했다면 중복지정할 필요는 없다) LPVOID lpMem // 해제할 메모리의 시작 주소 지정 ); |
*CreateFileMapping() 함수
- 파일 연결 오브젝트 생성을 위한 함수
원형 |
HANDLE WINAPI CreateFileMapping( __in HANDLE hFile, //파일 핸들 __in_opt LPSECURITY_ATTRIBUTES lpAttributes, //보안 속성 __in DWORD flProtect, //PAGE_READONLY, PAGE_READWRITE __in DWORD dwMaximumSizeHigh, // 연결할 메모리 최대 크기의 상위 4 바이트, 대용량 파일이 아니면 보통 0 __in DWORD dwMaximumSizeLow, // 메모리 최대 크기의 하위 4 바이트 __in_opt LPCTSTR lpName // 파일 연결 오브젝트의 이름 지정. NULL을 전달 할 수 있음 ); |
*MapViewOfFile() 함수
- 파일과 메모리를 실제로 매핑 시켜주는 함수.
원형 |
LPVOID WINAPI MapViewOfFile( __in HANDLE hFileMappingObject, // 커널 오브젝트의 핸들 __in DWORD dwDesiredAccess, // 연결된 메모리의 접근권한. CreateFileMapping 함수에대해 종속적이다.? __in DWORD dwFileOffsetHigh, // 메모리에 연결할 파일의 오프셋을 지정한다. __in DWORD dwFileOffsetLow, // 오프셋 하위 4 비트 __in SIZE_T dwNumberOfBytesToMap //메모리에 연결할 실제 크기를 바이트 단위로 지정. ); |
*UmapViewOfFile() 함수
- 매핑된 메모리를 해제.
원형 |
BOOL WINAPI UnmapViewOfFile( __in LPCVOID lpBaseAddress ); |
*FlushViewOfFile() 함수
- 메모리에 캐쉬된 데이터를 파일에 저장하게 해주는 함수.
원형 |
BOOL WINAPI FlushViewOfFile( __in LPCVOID lpBaseAddress, //파일에 저장할 메모리의 시작 주소 __in SIZE_T dwNumberOfBytesToFlush // 파일에 저장할 데이터 크기를 바이트 단위로 지정. ); |
[출처] 시스템 함수 정리|작성자 smuoon4680
'Development > C/C++' 카테고리의 다른 글
[Mutex] (0) | 2011.12.01 |
---|---|
[CriticalSection]의 사용 (0) | 2011.12.01 |
[Mutex Thread 동기화 예제] (0) | 2011.11.30 |
[Sleep함수] (0) | 2011.11.29 |
[thread에서 _beginthreadex의 void *arglist로 스레드에 여러 인수 넘겨주는 방법] (0) | 2011.11.23 |