Sdílet prostřednictvím


_locking

Zamknutí nebo odemknutí bajtů souboru.

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

Parametry

  • fd
    Popisovač souboru.

  • režim
    Uzamčení k provedení akce.

  • nbytes
    Počet bajtů k uzamknutí.

Vrácená hodnota

_lockingPokud je úspěšná, vrátí hodnotu 0.Vrácená hodnota –1 označuje selhání v případě kód chyby je nastavena na jednu z následujících hodnot.

  • EACCES
    (Soubor již uzamčen nebo odemknutí) narušení uzamčení.

  • EBADF
    Popisovač soubor je neplatný.

  • EDEADLOCK
    Narušení uzamčení.Kdy vrátil _LK_LOCK nebo _LK_RLCK zadán příznak a nelze jej uzamknout soubor po 10 pokusech.

  • EINVAL
    Neplatný argument byl vzhledem k _locking.

Pokud selže kvůli chybný parametr, jako je například popisovač souboru je neplatná je vyvoláno neplatný parametr popisovače, jak je popsáno v Ověření parametrů.

Poznámky

_locking Funkci uzamkne nebo odemkne nbytes bajtů souboru určeného parametrem fd.Uzamknutí bajtů v souboru zabraňuje přístupu do těchto bajtů jinými procesy.Zamknutí nebo odemknutí všech začíná na aktuální pozici ukazatele souboru a pokračuje k další nbytes bajtů.Je možné uzamknout bajtů za konec souboru.

režim musí být jedna z následujících konstant manifestu, které jsou definovány v Locking.h.

  • _LK_LOCK
    Zamkne zadaných bajtů.Bajtů nelze uzamknout, program se ihned pokusí znovu za 1 sekundu.Pokud po 10 pokusech nelze uzamknout bajtů, konstantu vrátí chybu.

  • _LK_NBLCK
    Zamkne zadaných bajtů.Pokud bajty nelze uzamknout, konstantu vrátí chybu.

  • _LK_NBRLCK
    Same as _LK_NBLCK.

  • _LK_RLCK
    Same as _LK_LOCK.

  • _LK_UNLCK
    Odemkne zadanou bajtů, které musí mít dříve uzamčen.

Uzamknout lze více oblastí souboru, které se nepřekrývají.Oblast odblokovány musí dříve zamčeny._lockingSloučit sousední regiony; Pokud dvě zamknuté oblasti sousedící, každý region musí být odemknuté samostatně.Oblasti být uzamčen pouze krátce a by odemčena před zavřením souboru nebo ukončení programu.

Požadavky

Rutina

Požadované záhlaví

Volitelné záhlaví

_locking

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

<errno.h>

Další informace o kompatibilitě v tématu Compatibility v úvodu.

Knihovny

Všechny verze C Runtime knihovny.

Příklad

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

Vstup: crt_locking.txt

The first thirty bytes of this file will be locked.

Vzorový výstup

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

Ekvivalent v rozhraní .NET Framework

System::IO::FileStream::LOCK

Viz také

Referenční dokumentace

Zpracování souborů

_creat _wcreat

_open, _wopen