|
���
locking - ��o��pye� ��� pa���o��pye� y�ac�o� �a��a ���
��e��� ��� �a��c�
���������
#include <sys/types.h> #include <sys/locking.h> int locking (fildes, mode, size) int fildes, mode; long size;
��������
locking �o��o��e� �po�eccy y�pa����� �a�a����� �a��a�� �
�a��e. �py��e �po�ecc�, �e�a���e ���a�� ��� ��ca�� y�ac�o�
�a��a, co�ep�a��� ��o��po�a���e �a���, �y�y� ��a�� �o �ex
�op, �o�a y�ac�o� �e pa���o��pye�c� � �a��c��oc�� o� pe���a
yc�a�o��e��o� ��o��po���.
��o�� �o��o ���o yc�a�o���� ��o��po��y o� ��e���, �a�� �o��e� ���� o��p�� ��� ��e��� ��� ��e���/�a��c�. ��o�� �o��o ���o yc�a�o���� ��o��po��y o� �a��c�, �a�� �o��e� ���� o��p�� ��� �a��c� ��� ��e���/�a��c�. �p� �e���o��e��� ���o�o �� ���x yc�o��� ��o��po��a �e c�a���c� � �o��pye�c� o����a EINVAL.
�po�ecc, �e�a���� ���a�� ��� ��ca�� y�ac�o�, pa�ee ��o��po�a���� o� ��e��� ��� �a��c� �py��� �po�ecco� (�c�o���y� pe��� LK_LOCK ��� LK_NBLCK), �y�e� ��a�� oc�o�o��e��� y�ac��a ��o��po�a���� e�o �po�ecco�.
�po�ecc, �e�a���� ��ca�� y�ac�o� �a��a, ��o ��� �a��o��po�a� o� �a��c� �py��� �po�ecco� (�c�o���y� pe��� LK_RLCK ��� LK_NBRLCK), �y�e� ��a�� oc�o�o��e��� y�ac��a ��o��po�a���� e�o �po�ecco�, a �po�ecc, �e�a���� ���a�� ��o� y�ac�o�, c�o�e� ���o����� ��e��e.
�po�ecc, �e�a���� ��o��po�a�� y�ac�o�, co�ep���oe �o�opo�o y�e ��o��po�a�o �py��� �po�ecco�, �y�e� ��a��, ec�� pe��� ��o��po��� LK_LOCK ��� LK_RLCK, � �y�e� �o��pa�a�� y�pa��e��e c o����o� EACCES, ec�� pe��� ��o��po��� LK_NBLCK ��� LK_NBRLCK.
fildes ����e�c� �o�epo� o��p��o�o �a��a, �o��pa�ae��� ���o�a�� creat, open, dup ��� pipe.
mode y�a���ae� pe��� ��o��po��� y�ac��a. C���o���ec��e � ��c�o��e ��a�e��� ��o�o ap�y�e��a �a�o��:
LK_UNLCK 0 | Pa���o��pye� y�ac�o�. Te�y��� �po�ecc oc�o�o��ae� y�ac�o�, �o�op�� o� pa�ee ��o��po�a�. |
---|---|
LK_LOCK 1 | ��o��pye� y�ac�o�. Te�y��� �po�ecc �y�e� ��a�� oc�o�o��e��� y�ac��a, ec�� �a�a�-���o e�o �ac�� ��o��po�a�a �py��� �po�ecco�. B �o�e��o� ��o�e y�ac�o� ��o��pye�c� �e�y��� �po�ecco� � �py��e �po�ecc� �e �o�y� �e�ep� ���a�� ��� ��ca�� ��o� y�ac�o� (��o��po��a o� ��e��� � �a��c�). |
LK_NBLCK 2 | ��o��pye� y�ac�o�. Ec�� �a�a�-���o �ac�� y�ac��a ��o��po�a�a �py��� �po�ecco�, �o��pa�ae�c� o����a EACCES �e� o���a��� oc�o�o��e��� ��o��po�a��o�o y�ac��a (��o��po��a �e� o���a���). |
LK_RLCK 3 | A�a�o����o LK_LOCK �a �c����e��e� �o�o, ��o ��o��po�a���� y�ac�o� �o�e� ���a��c� �py���� �po�ecca�� (��o��po��a o� �a��c�). |
LK_NBRLCK 4 | A�a�o����o LK_NBLCK �a �c����e��e� �o�o, ��o ��o��po�a���� y�ac�o� �o�e� ���a��c� �py���� �po�ecca�� (��o��po��a o� �a��c� �e� o���a���). |
locking o�c�����ae� �a�a�o ��o��pye�o�o y�ac��a o� �e�y�e� �o����� �a��a. T�����a� �oc�e�o�a�e���oc�� o�epa�opo�, ��o��py��a� �pe�ye��� y�ac�o� � �a��e, �o�e� ���� c�e�y��e�:
fd=open("datafile",O_RDWR); lseek(fd,200L,0); locking(fd,LK_LOCK,200L);
��� ��o��po�a��� ��� pa���o��po�a��� �e�o�o �a��a �y��o yc�a�o���� y�a�a�e�� �o����� �a �a�a�o �a��a � �a�e� c�e�a�� ���o� locking c size, pa���� 0.
size �a�ae� ��c�o �oc�e�o�a�e����x �a��o� (����y y�ac��a), �o�op�e ��o��py��c� ��� pa���o��py��c�. ��ac�o�, �o�op�� �o��e� ���� ��o��po�a�, �a���ae�c� o� �e�y�e� �o����� � �a��e. Ec�� size pa��o 0, ��o��pye�c� ��� pa���o��pye�c� �ec� �a�� (�a�c��a���o �o 2 � 30 c�e�e�� �a��o�). size �o�e� �a�a�a�� �pa�y� �pa���y �a �o��o� �a��a; � ��o� c�y�ae �o���o �po�ecc, ��o��po�a���� ��o� y�ac�o�, �o�e� �o�y�a�� �oc�y� � �a��a� ��y�p� ��o�o y�ac��a.
Bo��o��oc�� ��a���o� ��o��po��� (�y���a) �o����ae� �o��a, �o��a �po�ecc, ��e���� ��o��po�a���� y�ac�o�, �p�oc�a�a����ae�c� �p� �o����e ��o�po�a�� y�ac�o�, ��o��po�a���� y�e �py��� �po�ecco�. �o��o�y �y����� locking(3), read(3) � write(3) �po�ep��� �o��o��oc�� �y���a �pe��e, �e� �epe�ec�� �po�ecc � o���a��e. Ec�� o��apy�e�a �o��o��oc�� �y���a, ���c�pye�c� o����a [EDEADLK] (��� [EDEADLOCK]) � �e�c���e �e ���o���e�c�.
��o��pye��� y�ac�o� (�ec� ��� e�o �ac��) �o�e� co�ep�a��c� � pa�ee ��o��po�a��o� y�ac��e. B ��o� c�y�ae, a �a��e ec�� y�ac��� c�e���e, y�ac��� o��e������c� � o��� y�ac�o� �p� yc�o��� co��aco�a��� pe���o� ��o��po���. Ec�� pe���� �epece�a���xc� y�ac��o� pa������, o��e���e��e �o��o��o �p� y�o��e��ope��� �oc�e��e�o y�a�a��o�o pe���a. Ta��� o�pa�o�, ec�� y�ac�o�, ��o��pye��� o� �a��c�, co��a�ae� ��� ����e�c� �ac��� y�ac��a, ��o��po�a��o�o pa�ee �e� �e �po�ecco� o� ��e��� � �a��c�, �o��� y�ac�o� �y�e� ��o��po�a� �o���o o� ��e���, a oc�a��a�c� �ac�� �pe��e�o y�ac��a, ec�� o�a ec��, �y�e� �po�o��a�� ���� ��o��po�a��o� o� ��e��� � �a��c�. Ha ��c�o ��o��pye��x � �a��e y�ac��o� o�pa���e��� �e�, �o ec�� o�pa���e��e �a o��ee ��c�o ��o��po�a���x y�ac��o� � c�c�e�e. ��� XENIX ��o o�pa���e��e pa��o 200.
�a�poc �a pa���o��po�a��e �o�e� pa���o��po�a�� �o��oc��� ��� �ac����o �ec�o���o y�ac��o�, ��o��po�a���x �a���� �po�ecco�. Ec�� y�ac��� pa���o��py��c� �e �o��oc���, oc�a���ec� y�ac��� oc�a��c� ��o��po�a����� �e� �e �po�ecco�. Pa���o��po�a��e cepe���� y�ac��a �p��o��� � �o���e��� ��yx ��o��po�a���x y�ac��o�, �.e. � �o�a��e��� o��o�o ��e�e��a � �a����e ��o��po�a���x y�ac��o�. Ec�� �a����a y�e �o��a, ���c�pye�c� o����a � �e�c���e �e ���o���e�c�. Pa���o��po�a�� y�ac�o� �o�e� �o���o �o� �po�ecc, �o�op�� e�o ��o��po�a�. Pa���o��po�a��e y�ac��a, �o�op�� ��� �e ��� ��o��po�a�, ��� y�e pa���o��po�a�, �e �e�ae� ���e�o. �p� �a�ep�e��� �po�ecca �ce ��o��po�a���e �� y�ac��� pa���o��py��c�.
Ec�� �po�ecc o��p�� �a�� �o�ee o��o�o pa�a, �ce c�e�a���e ���� �po�ecco� � ��o� �a��e ��o��po��� y����o�a��c� �p� �ep�o� �a�p���� �a��a.
�p��e�e��e ��o��po��� � c�e��a���o�y �a��y ��� �po�pa���o�y �a�a�y �e �o��pa�ae� o�����, �o �p� o�epa���x ��e���/�a��c� c ���� �a��o� ��o��po��a ���op�pye�c�. He���� �p��e���� ��o��po��y � �a�a�o�y.
��. �����
creat(3), open(3), read(3), write(3), dup(3), close(3),
lseek(3)
�����������
B c�y�ae o����� locking �o��pa�ae� (int)-1. Ec�� �p�
��o��po��e c pe���o� LK_LOCK ��� LK_RLCK y�ac�o� o�a���ae�c�
y�e ��o��po�a����, XENIX System V �a�oc�� � errno EAGAIN.
XENIX 3.0 � ��o� c�y�ae �a�oc�� � errno EACCES. Ec��
��o��po��a �p��e��e�c� � �a�a�o�y, � errno �a�oc��c� EACCES.
Ec�� �o��o�e� �y���, � errno �a�oc��c� EDEADLK (���
EDEADLOCK). Ta�o� �e �o� o����� �a�oc��c� �p� �epe�o��e���
c�c�e��o� �a����� ��o��po�a���x y�ac��o�.
|