_locking
잠그거나 바이트 파일의 잠금을 해제 합니다.
int _locking(
int fd,
int mode,
long nbytes
);
매개 변수
fd
파일 설명자입니다.모드
잠금 작업이 수행 됩니다.nbytes
잠글 수 있는 바이트 수입니다.
반환 값
_locking연결에 성공 하면 0을 반환 합니다.경우에 실패를 반환 값이-1 나타내는 errno 는 다음 값 중 하나로 설정 됩니다.
EACCES
잠금 위반 (이미 잠금 및 잠금 해제 파일)입니다.EBADF
잘못 된 파일 설명자입니다.EDEADLOCK
잠금 위반입니다.반환은 _LK_LOCK 또는 _LK_RLCK 플래그를 지정 하며 10 시도 후 파일을 잠글 수 없습니다.EINVAL
잘못 된 인수에 제공 된 _locking.
오류 때문에 잘못 된 파일 설명자를 것과 같이 잘못 된 매개 변수 인 경우 잘못 된 매개 변수 처리기를의 설명에 따라 호출 매개 변수 유효성 검사.
설명
_locking 함수 잠그거나 잠금을 해제 nbytes 바이트 수로 지정 된 파일의 fd.바이트를 파일에서 잠금 다른 프로세스에서이 바이트에 액세스 하지 못하도록 합니다.모든 잠금 또는 잠금 해제 파일 포인터의 현재 위치에서 시작 하 고 진행 된 다음 nbytes 바이트입니다.잠금 바이트 수 있습니다 파일의 끝을 지 나.
모드 locking.h에 정의 된 다음 매니페스트 상수 중 하나 여야 합니다.
_LK_LOCK
지정 된 바이트를 잠급니다.바이트 잠글 수 없는 경우 프로그램에서 즉시 1 초 후에 다시 시도 합니다.10 시도 후 바이트 잠글 수 없습니다 경우 오류를 반환 하는 상수._LK_NBLCK
지정 된 바이트를 잠급니다.바이트 잠글 수 없습니다 경우 상수는 오류를 반환 합니다._LK_NBRLCK
_LK_NBLCK와 동일합니다._LK_RLCK
_LK_LOCK와 동일합니다._LK_UNLCK
지정 된 바이트 잠겨 있어야 합니다 잠금을 해제 합니다.
중첩 되지 않는 여러 영역 파일을 잠글 수 있습니다.잠금이 해제 되 고 지역 이전에 잠 궜 해야 합니다._locking인접 한 영역을 병합 하지 않습니다. 잠긴된 영역이 두 인접 한 경우 각 지역의 개별적으로 잠금 해제 해야 합니다.지역 간단 하 게만 잠금 및 파일을 닫거나 프로그램을 종료 하기 전에 잠금을 해제 해야 합니다.
요구 사항
루틴 |
필수 헤더 |
선택적 헤더 |
---|---|---|
_locking |
<io.h> 및 <sys/locking.h> |
<errno.h> |
더 많은 호환성 정보를 참조 하십시오. 호환성 소개에서 합니다.
라이브러리
모든 버전의 C 런타임 라이브러리.
예제
// crt_locking.c
/* This program opens a file with sharing. It locks
* some bytes before reading them, then unlocks them. Note that the
* program works correctly only if the file exists.
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/locking.h>
#include <share.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int main( void )
{
int fh, numread;
char buffer[40];
/* Quit if can't open file or system doesn't
* support sharing.
*/
errno_t err = _sopen_s( &fh, "crt_locking.txt", _O_RDONLY, _SH_DENYNO,
_S_IREAD | _S_IWRITE );
printf( "%d %d\n", err, fh );
if( err != 0 )
exit( 1 );
/* Lock some bytes and read them. Then unlock. */
if( _locking( fh, LK_NBLCK, 30L ) != -1 )
{
long lseek_ret;
printf( "No one can change these bytes while I'm reading them\n" );
numread = _read( fh, buffer, 30 );
buffer[30] = '\0';
printf( "%d bytes read: %.30s\n", numread, buffer );
lseek_ret = _lseek( fh, 0L, SEEK_SET );
_locking( fh, LK_UNLCK, 30L );
printf( "Now I'm done. Do what you will with them\n" );
}
else
perror( "Locking failed\n" );
_close( fh );
}
입력: crt_locking.txt
The first thirty bytes of this file will be locked.
샘플 출력
No one can change these bytes while I'm reading them
30 bytes read: The first thirty bytes of this
Now I'm done. Do what you will with them