다음을 통해 공유


_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

해당 .NET Framework 항목

System::IO::FileStream::Lock

참고 항목

참조

파일 처리

_creat, _wcreat

_open, _wopen