LockFile 함수(fileapi.h)
호출 프로세스의 배타적 액세스를 위해 지정된 파일을 잠급니다.
공유 잠금 만들기 또는 장애 조치(fail) 차단 작업 등의 추가 옵션을 지정하려면 LockFileEx 함수를 사용합니다.
구문
BOOL LockFile(
[in] HANDLE hFile,
[in] DWORD dwFileOffsetLow,
[in] DWORD dwFileOffsetHigh,
[in] DWORD nNumberOfBytesToLockLow,
[in] DWORD nNumberOfBytesToLockHigh
);
매개 변수
[in] hFile
파일에 대한 핸들입니다. 파일 핸들은 GENERIC_READ 또는GENERIC_WRITE 액세스 권한으로 만들어졌어야 합니다. 자세한 내용은 파일 보안 및 액세스 권한을 참조하세요.
[in] dwFileOffsetLow
잠금이 시작되어야 하는 파일의 시작 바이트 오프셋의 하위 순서 32비트입니다.
[in] dwFileOffsetHigh
잠금이 시작되어야 하는 파일의 시작 바이트 오프셋의 상위 32비트입니다.
[in] nNumberOfBytesToLockLow
잠글 바이트 범위 길이의 하위 32비트입니다.
[in] nNumberOfBytesToLockHigh
잠글 바이트 범위 길이의 상위 32비트입니다.
반환 값
함수가 성공하면 반환 값은 0이 아닌 값(TRUE)입니다.
함수가 실패하면 반환 값은 0(FALSE)입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
LockFile에 대한 호출이 동기적으로 완료되면 완료 포트가 파일 핸들과 연결될 때 완료 항목이 큐에 대기되지 않을 수 있습니다.
UnlockFile 함수는 LockFile에 의해 잠긴 파일 영역의 잠금을 해제합니다.
파일 영역을 잠그면 이 파일 핸들을 사용하여 잠금 프로세스의 스레드가 지정된 지역에 대한 단독 액세스 권한을 부여합니다. 파일 핸들이 잠금 프로세스에서 만든 프로세스에 의해 상속되는 경우 자식 프로세스에 잠긴 지역에 대한 액세스 권한이 부여되지 않습니다. 잠금 프로세스에서 파일을 두 번째로 열면 영역 잠금이 해제될 때까지 이 두 번째 핸들을 통해 지정된 지역에 액세스할 수 없습니다.
파일 영역을 잠그면 매핑된 파일 보기에서 읽거나 쓰는 것을 막을 수 없습니다.
현재 파일의 끝을 벗어나는 바이트를 잠글 수 있습니다. 파일 끝에 레코드 추가를 조정하는 데 유용합니다.
배타적 잠금은 파일의 기존 잠긴 영역과 겹칠 수 없습니다. 자세한 내용은 LockFileEx를 참조하세요.
LockFile이 파일 영역을 잠글 수 없는 경우 즉시 0을 반환합니다. 차단되지 않습니다. 잠금을 획득할 때까지 차단할 파일 잠금 요청을 실행하려면 LOCKFILE_FAIL_IMMEDIATELY 플래그 없이 LockFileEx를 사용합니다.
프로세스가 잠긴 파일의 일부로 종료되거나 미해결 잠금이 있는 파일을 닫으면 운영 체제에서 잠금이 잠금 해제됩니다. 그러나 운영 체제에서 이러한 잠금을 해제하는 데 걸리는 시간은 사용 가능한 시스템 리소스에 따라 달라집니다. 따라서 프로세스가 종료되면 잠긴 모든 파일의 잠금을 명시적으로 해제하는 것이 좋습니다. 이 작업을 수행하지 않으면 운영 체제에서 아직 잠금을 해제하지 않은 경우 이러한 파일에 대한 액세스가 거부될 수 있습니다.
Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술을 통해 지원됩니다.
기술 | 지원됨 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | Yes |
SMB 3.0 TFO(투명 장애 조치(failover)) | Yes |
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 | Yes |
CsvFS(클러스터 공유 볼륨 파일 시스템) | Yes |
ReFS(Resilient File System) | 예 |
예제
예를 들어 한 파일을 다른 파일에 추가를 참조하세요.
요구 사항
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | fileapi.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |