파일 관련 기본 함수
- 파일 생성 : CreateFile
-> 파일도 커널 오브젝트가 생성되고 핸들이 반환
-> File Pointer은 커널에 의해 관리
- 입력 및 출력 : ReadFile / WriteFile
- 파일 닫기 : CloseHandle
HANDLE CreateFile(
LPCSTR lpFileName, // 파일 이름
DWORD dwDesiredAccess, // 읽기/쓰기 모드
DWORD dwShareMode, // 파일 공유 방식
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 보안 속성
DWORD dwCreationDisposition, // 파일 생성 옵션
DWORD dwFlagsAndAttributes, // 파일 특성 정보
HANDLE hTemplateFile
);
BOOL ReadFile(
HANDLE hFile, // 파일 핸들
LPVOID lpBuffer, // 읽어들일 데이터 저장할 버퍼의 주소
DWORD nNumberOfBytesToRead, // 읽을 데이터의 크기
LPDWORD lpNumberOfBytesRead, // 실제 읽어들인 데이터의 크기를 저장할 변수의 주소
LPOVERLAPPED lpOverlapped // 파일 특성 정보
);
BOOL WriteFile(
HANDLE hFile, // 파일 핸들
LPCVOID lpBuffer, // 데이터를 저장하고 있는 버퍼의 주소
DWORD nNumberOfBytesToWrite, // 저장할 데이터의 크기
LPDWORD lpNumberOfBytesWritten, // 실제 저장된 데이터의 크기를 저장할 변수의 주소
LPOVERLAPPED lpOverlapped // 파일 특성 정보
);
BOOL CloseHandle(
HANDLE hObject
);
파일 정보 얻는 함수
- GetFileTime : 만든 날짜, 수정한 날짜, 엑세스한 날짜를 핸들을 통해 확인
- GetFileAttributes : 읽기 전용, 숨김, 보관과 같은 정보를 파일 이름을 통해 확인
- GetFileInformationByHandle : 위 두 함수에서 얻을 수 있는 정보를 핸들을 통해 확인
BOOL GetFileTime(
HANDLE hFile,
LPFILETIME lpCreationTime,
LPFILETIME lpLastAccessTime,
LPFILETIME lpLastWriteTime
);
DWORD GetFileAttributesA(
LPCSTR lpFileName
);
BOOL GetFileInformationByHandle(
HANDLE hFile,
LPBY_HANDLE_FILE_INFORMATION lpFileInformation
);
파일 포인터 이동 함수
DWORD SetFilePointer(
HANDLE hFile,
LONG lDistanceToMove,
PLONG lpDistanceToMoveHigh,
DWORD dwMoveMethod // 파일 포인터 이동 시 기준이 되는 위치
);
- 함수 실행 후 파일의 위치를 반환해줌
- 두 번째 인자와 세 번째 인자를 통해서 파일 포인터를 얼마나 이동할 지 설정하는데 32비트 기반이라면 4Byte가 최대이기 때문에 두 번째 인자에 정보를 넣고 세 번째 인자는 NULL로 설정하고 64비트 기반이라면 두 번째 인자에 하위 4바이트 정보, 세 번째 인자에 상위 4바이트 정보를 넣음
- 32비트에서는 파일의 최대 크기는 4GB -2
-> 32비트로 표현할 수 있는 주소의 번지는 0 ~ 4G - 1
-> 파일 관련 함수에 오류가 발생하면 INVALID_SET_FILE_POINTER라는 상수 값을 반환하는데 이 값이 -1(0xFFFFFFFF) 이고 이 값은 4G -1임
-> 그렇기 때문에 4G - 1이 반환되었을 때 상수를 의미하는 지 파일의 실제 크기인지 혼란스럽기 때문에 사용하지 않음
'Programming > System Programming' 카테고리의 다른 글
윈도우즈 시스템 프로그래밍 - 19. 비동기 I/O와 APC(2) (0) | 2020.08.19 |
---|---|
윈도우즈 시스템 프로그래밍 - 19. 비동기 I/O와 APC(1) (0) | 2020.08.18 |
윈도우즈 시스템 프로그래밍 - 18. 파일 I/O와 디렉토리 컨트롤(1) (0) | 2020.08.17 |
윈도우즈 시스템 프로그래밍 - 17. 구조적 예외처리(SHE) 기법(3) (0) | 2020.08.17 |
윈도우즈 시스템 프로그래밍 - 17. 구조적 예외처리(SHE) 기법(2) (0) | 2020.08.17 |