_locking

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Bloquea o desbloquea los bytes de un archivo.

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

Parámetros

fd
Descriptor del archivo.

mode
Acción que se realizará el bloqueo.

nbytes
Número de bytes que se va a bloquear.

_lockingDevuelve 0 si es correcto. Un valor devuelto de – 1 indica un error, en cuyo caso errno se establece en uno de los siguientes valores.

EACCES
(Archivo ya bloqueado o desbloqueado) de la infracción de bloqueo.

EBADF
Descriptor de archivo no válido.

EDEADLOCK
Infracción de bloqueo. Se devuelve cuando la _LK_LOCK o _LK_RLCK se especifica la marca y no se puede bloquear el archivo después de 10 intentos.

EINVAL
Se proporcionó un argumento no válido para _locking.

Si el error es debido a un parámetro incorrecto, como un descriptor de archivo no válido, se invoca el controlador de parámetros no válidos, como se describe en validación del parámetro.

El _locking función bloquea o desbloquea nbytes bytes del archivo especificado por fd. Bytes de un archivo de bloqueo impide el acceso a esos bytes por otros procesos. Todos los bloquear o desbloquear comienza en la posición actual del puntero de archivo y continúa durante los próximos nbytes bytes. Es posible que los bytes de bloqueo más allá del final del archivo.

modo de debe ser una de las siguientes constantes de manifiesto, que se definen en Locking.h.

_LK_LOCK
Bloquea los bytes especificados. Si no se puede bloquear los bytes, el programa intenta inmediatamente después de la 1 segundo. Si, después de 10 intentos, no se puede bloquear los bytes, la constante devuelve un error.

_LK_NBLCK
Bloquea los bytes especificados. Si no se puede bloquear los bytes, la constante devuelve un error.

_LK_NBRLCK
Igual a _LK_NBLCK.

_LK_RLCK
Igual a _LK_LOCK.

_LK_UNLCK
Desbloquea los bytes especificados, que deben haber bloqueado anteriormente.

Se pueden bloquear varias regiones de un archivo que no se superponen. Debe haber ha bloqueado previamente una región que se va a desbloquear. _lockingno combina regiones adyacentes; Si dos regiones bloqueadas son adyacentes, cada región debe estar desbloqueada por separado. Las regiones se deben bloquear brevemente y deben desbloquearse antes de cerrar un archivo o salir del programa.

RutinaEncabezado necesarioEncabezado opcional
_locking<io.h>y</io.h><errno.h>

Para obtener más información sobre compatibilidad, vea Compatibility en la introducción.

Todas las versiones de las bibliotecas en tiempo de ejecución de 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 );  
}  

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  

System::IO::FileStream::lock

Control de archivos
_creat, _wcreat
_open, _wopen

Mostrar: