_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