_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í parametru.
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