Bagikan melalui


_locking

Mengunci atau membuka kunci byte file.

Sintaks

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

Parameter

fd
Pendeskripsi file.

mode
Mengunci tindakan untuk dilakukan.

nbytes
Jumlah byte yang akan dikunci.

Nilai hasil

_locking mengembalikan 0 jika berhasil. Nilai pengembalian -1 menunjukkan kegagalan, dalam hal errno ini diatur ke salah satu nilai berikut.

errno nilai Kondisi
EACCES Mengunci pelanggaran (file sudah terkunci atau tidak terkunci).
EBADF Pendeskripsi file tidak valid.
EDEADLOCK Mengunci pelanggaran. Dikembalikan saat _LK_LOCK bendera atau _LK_RLCK ditentukan dan file tidak dapat dikunci setelah 10 upaya.
EINVAL Argumen yang tidak valid diberikan kepada _locking.

Jika kegagalan disebabkan oleh parameter yang buruk, seperti deskriptor file yang tidak valid, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter.

Keterangan

Fungsi _locking mengunci atau membuka kunci nbytes byte file yang ditentukan oleh fd. Mengunci byte dalam file mencegah akses ke byte tersebut oleh proses lain. Semua penguncian atau pembukaan kunci dimulai pada posisi penunjuk file saat ini dan melanjutkan untuk byte berikutnya nbytes . Dimungkinkan untuk mengunci byte melewati akhir file.

mode harus menjadi salah satu konstanta manifes berikut, yang didefinisikan dalam Locking.h.

mode nilai Efek
_LK_LOCK Mengunci byte yang ditentukan. Jika byte tidak dapat dikunci, program segera mencoba lagi setelah 1 detik. Jika byte tidak dapat dikunci setelah 10 upaya, konstanta mengembalikan kesalahan.
_LK_NBLCK Mengunci byte yang ditentukan. Jika byte tidak dapat dikunci, konstanta mengembalikan kesalahan.
_LK_NBRLCK Sama seperti _LK_NBLCK.
_LK_RLCK Sama seperti _LK_LOCK.
_LK_UNLCK Membuka kunci byte yang ditentukan, yang sebelumnya harus dikunci.

Beberapa wilayah file yang tidak tumpang tindih dapat dikunci. Wilayah yang tidak terkunci harus telah dikunci sebelumnya. _locking tidak menggabungkan wilayah yang berdekatan; jika dua wilayah terkunci berdekatan, setiap wilayah harus dibuka secara terpisah. Wilayah harus dikunci hanya sebentar dan harus dibuka kuncinya sebelum menutup file atau keluar dari program.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan Header opsional
_locking <io.h> dan <sys/locking.h> <errno.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Pustaka

Semua versi pustaka run-time C.

Contoh

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

Input: crt_locking.txt

The first thirty bytes of this file will be locked.

Sampel output

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

Lihat juga

Penanganan file
_creat, _wcreat
_open, _wopen