Compartilhar via


_locking

Bloqueia e desbloqueia bytes de um arquivo.

int _locking( 
   int fd, 
   int mode, 
   long nbytes  
);

Parâmetros

  • fd
    O descritor de Arquivo.

  • mode
    Ação de bloqueio executar.

  • nbytes
    Número de bytes a ser bloqueadas.

Valor de retorno

_locking retornará 0 se com êxito. Um valor de retorno – 1 indica falha, nesse caso errno é definido como um dos seguintes valores.

  • EACCES
    Violação de bloqueio (o arquivo já bloqueado ou desbloqueou).

  • EBADF
    O descritor de arquivo inválido.

  • EDEADLOCK
    Violação de bloqueio. Retornado quando o sinalizador de _LK_LOCK ou de _LK_RLCK for especificado e o arquivo não podem ser bloqueadas depois de 10 tentativas.

  • EINVAL
    Um argumento inválido foi atribuído a _locking.

Se a falha é devido a um parâmetro incorreto, como um descritor de arquivo inválido, o manipulador inválido do parâmetro é invocada, conforme descrito em Validação do parâmetro.

Comentários

A função de _locking bloqueios ou desbloqueia bytes de nbytes do arquivo especificado por fd. Os bytes de bloqueio em um arquivo impedem o acesso a esses 2 bytes por outros processos. Qualquer bloqueio ou desbloqueio começa na posição atual do ponteiro de arquivo e continuam para os próximos nbytes bytes. É possível bloquear bytes após o término de arquivo.

o modo deve ser uma das seguintes constantes manifestas, que são definidas em Locking.h.

  • _LK_LOCK
    Bloqueia os bytes especificados. Se os bytes não podem ser bloqueadas, o programa tenta imediatamente novamente depois de 1 segundos. Se, depois de 10 tentativas, os bytes não podem ser bloqueadas, a constante retornará um erro.

  • _LK_NBLCK
    Bloqueia os bytes especificados. Se os bytes não podem ser bloqueadas, a constante retornará um erro.

  • _LK_NBRLCK
    Mesmo que _LK_NBLCK.

  • _LK_RLCK
    Mesmo que _LK_LOCK.

  • _LK_UNLCK
    Desbloqueia os bytes especificado, que deve ter sido previamente bloqueadas.

Várias regiões de um arquivo que não se sobrepõem podem ser bloqueadas. Uma região que está sendo bloqueada deve ter sido previamente bloqueada. _locking não mesclar regiões adjacentes; se duas regiões são bloqueadas adjacentes, cada região deve ser bloqueada separadamente. As regiões devem ser bloqueadas somente brevemente e devem ser desbloqueadas antes de fechar um arquivo ou de saída do programa.

Requisitos

Rotina

Cabeçalho necessário

Cabeçalho opcional

_locking

<io.h e> sistema </locking.h>

<errno.h>

Para obter mais informações sobre compatibilidade, consulte Compatibilidade na Introdução.

Bibliotecas

Todas as versões das Bibliotecas em tempo de execução C.

Exemplo

// 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 );
}

Entrada: crt_locking.txt

The first thirty bytes of this file will be locked.

Saída de Exemplo

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

Equivalência do .NET Framework

System::IO::FileStream::Lock

Consulte também

Referência

Manipulação de arquivos

_creat, _wcreat

_open, _wopen