Aracılığıyla paylaş


_locking

Kilitler veya bir dosyanın bayt kilidini açar.

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

Parametreler

  • fd
    Dosya tanımlayıcısı.

  • mod
    Yapılacak işlem kilitleme.

  • nbytes
    Kilitlemek için bayt sayısı.

Dönüş Değeri

_lockingbaşarılı olursa 0 değerini döndürür.–1 Dönüş değeri hata, durumda olduğunu gösteren errno aşağıdaki değerlerden birini ayarlanır.

  • EACCES
    Kilitleme ihlali (zaten kilitli veya kilidi dosyası).

  • EBADF
    Geçersiz dosya tanımlayıcısı.

  • EDEADLOCK
    Kilitleme ihlali.Ne zaman iade _LK_LOCK veya _LK_RLCK bayrağı belirtilmişse ve 10 denemeden sonra Dosya kilitlenemiyor.

  • EINVAL
    Geçersiz bir bağımsız değişken için verilen _locking.

Gibi bir geçersiz dosya tanımlayıcısı hatalı parametre yüzünden başarısız olması durumunda geçersiz parametre işleyicisi, açıklandığı şekilde çağrılır Parametre doğrulama.

Notlar

_locking İşlevi kilitler veya kilidini açar nbytes tarafından belirtilen dosyanın bayt fd.Bayt cinsinden bir dosya kilitleme erişim, diğer işlemler tarafından bu bayta engeller.Tüm kilitlenmesi veya kilidinin kaldırılması dosya işaretçisi geçerli konumda başlar ve sonraki devam eder nbytes bayt.Kilit baytlarını olası dosya sonu tamamlamıştır.

Mod Locking.h içinde tanımlanan aşağıdaki bildirim sabitlerinden biri olmalıdır.

  • _LK_LOCK
    Belirtilen bayt sayısını kilitler.Bayt kilitli, programı yeniden 1 saniye sonra hemen çalışır.10 Denemeden sonra bayt kilitlenemez, sabit bir hata döndürür.

  • _LK_NBLCK
    Belirtilen bayt sayısını kilitler.Bayt kilitli, sabit bir hata döndürür.

  • _LK_NBRLCK
    _LK_NBLCK ürünüyle aynı.

  • _LK_RLCK
    _LK_LOCK ürünüyle aynı.

  • _LK_UNLCK
    Önceden kilitlenen gerekir belirtilen bayt sayısını kilidini açar.

Örtüşmeyen birden çok bölgeye bir dosyanın kilitli.Kilidi bir bölge önceden kilitlenmesi gerekir._lockingbitişik bölgeler birleştirmez; bitişik iki Kilitli bölgeler, her bölge ayrı ayrı kilidinin açılması gerekir.Bölge yalnızca kısa bir süre kilitli ve bir dosyayı kapatmak veya programdan çıkmadan önce kilidi.

Gereksinimler

Yordamı

Gerekli başlık

İsteğe bağlı bir üstbilgi

_locking

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

<errno.h>

Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.

Kitaplıkları

Tüm sürümleri c çalışma zamanı kitaplıkları.

Örnek

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

Giriş: crt_locking.txt

The first thirty bytes of this file will be locked.

Örnek Çıktı

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

.NET Framework Eşdeğeri

System::IO::FileStream::LOCK

Ayrıca bkz.

Başvuru

Dosya işleme

_creat, _wcreat

_open, _wopen