Udostępnij za pośrednictwem


_locking

Blokuje lub odblokowuje bajty pliku.

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

Parametry

  • fd
    Plik deskryptora.

  • tryb
    Blokowanie akcję do wykonania.

  • nbytes
    Liczba bajtów, aby zablokować.

Wartość zwracana

_lockingZwraca wartość 0, jeśli kończy się pomyślnie.Zwracana wartość –1 wskazuje błąd, w którym to przypadku errno jest ustawiona na jeden z następujących wartości.

  • EACCES
    Blokowanie naruszenie (plik już zablokowany lub odblokowany).

  • EBADF
    Nieprawidłowy plik deskryptora.

  • EDEADLOCK
    Naruszenie zasad blokowania.Zwracane, gdy _LK_LOCK lub _LK_RLCK jest podana flaga i pliku nie mogą być zablokowane po 10 razy.

  • EINVAL
    Został przekazany nieprawidłowy argument _locking.

Jeśli błąd jest spowodowany zły parametr, takie jak deskryptora nieprawidłowy plik obsługi nieprawidłowy parametr jest wywoływany, jak opisano w Sprawdzanie poprawności parametru.

Uwagi

_locking Funkcja blokuje lub odblokowuje nbytes bajtów w pliku określonym przez fd.Blokowanie bajtów w pliku uniemożliwia dostęp do tych bajtów przez inne procesy.Blokowanie lub odblokowywanie wszystkich rozpoczyna się w bieżącym położeniu wskaźnika pliku i przechodzi do następnego nbytes bajtów.Istnieje możliwość blokowania bajtów poza końcem pliku.

Tryb musi mieć jedną z następujących stałych manifestu, które są zdefiniowane w Locking.h.

  • _LK_LOCK
    Blokuje określonych bajtów.Jeśli nie mogą być zablokowane bajty, program niezwłocznie próbuje ponownie po 1 sekunda.Jeśli po 10 próbach nie mogą być zablokowane bajty, stałą zwraca błąd.

  • _LK_NBLCK
    Blokuje określonych bajtów.Jeśli nie mogą być zablokowane bajty, stałą zwraca błąd.

  • _LK_NBRLCK
    Same as _LK_NBLCK.

  • _LK_RLCK
    Same as _LK_LOCK.

  • _LK_UNLCK
    Odblokowuje określonych bajtów, które musi wcześniej zablokowane.

Można zablokować pliku wielu regionów, które nie nakładają się.Region jest odblokowany muszą mieć wcześniej zablokowane._lockingnie scala sąsiednich regionach; Jeśli sąsiadujących ze sobą dwa regiony zablokowane, każdy region musi być odblokowane oddzielnie.Regiony powinny zostać zablokowane tylko na krótko i powinny zostać odblokowany przed zamknięciem pliku lub zamykania programu.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

Opcjonalne nagłówka

_locking

<io.h> i <sys/locking.h>

<errno.h>

Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.

Biblioteki

Wszystkie wersje biblioteki uruchomieniowej c.

Przykład

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

Dane wejściowe: crt_locking.txt

The first thirty bytes of this file will be locked.

Przykładowe dane wyjściowe

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

Odpowiednik w programie .NET Framework

System::IO::FileStream::Lock

Zobacz też

Informacje

Obsługa plików

_creat, _wcreat

_open, _wopen