Β }Β region_to_lock.l_type = F_UNLCK;Β region_to_lock.l_whence = SEEK_SET;Β region_to_lock.l_start = 0;Β region_to_lock.l_len = 50;Β printf("Process %d, trying F_UNLCK, region %d to %d\n", getpid()", (int)region_to_lock.l_start,Β (int)(region_to_lock.l_start + region_to_lock.l_len));Β res = fcntl(file_desc, F_SETLK, &region_to_lock);Β if (res == -1) {Β printf("Process %d β failed to unlock region\n", getpid());Β } else {Β printf("Process %d β unlocked region\n", getpid());Β }Β region_to_lock.l_type = F_WRLCK;Β region_to_lock.l_whence = SEEK_SET;Β region_to_lock.lstart = 16;Β region_to_lock.l_len = 5;Β printf("Process %d, trying F_WRLCK, region %d to %d\n", getpid(), (int)region_to_lock.l_start,Β (int)(region_to_lock.l_start + region_to_lock.l_len));Β res = fcntl(file_desc, F_SETLK, &region_to_lock);Β if (res == -1) {Β printf("Process %d β failed to lock region\n", getpid());Β } else {Β printf("Process %d β obtained lock on region\n", getpid());Β }Β region_to_lock.l_type = F_RDLCK;Β region_to_lock.l_whence = SEEK_SET;Β region_to_lock.l_start = 40;Β region_to_lock.l_len = 10;Β printf("Process %d, trying F_RDLCK, region %d to %d\n", getpid(), (int)region_to_lock.l_start,Β (int)(region_to_lock.l_start + region_to_lock.l_len));Β res = fcntl(filedesc, F_SETLK, &region_to_lock);Β if (res == -1) {Β printf("Process %d β failed to lock region\n", getpid());Β } else {Β printf("Process %d β obtained lock on region\n", getpid());Β }Β region_to_lock.l_type = F_WRLCK;Β region_to_lock.l_whence = SEEK_SET;Β region_to_lock.l_start = 16;Β region_to_lock. l_len = 5;Β printf("Process %d, trying F_WRLCK with wait, region %d to %d\n", getpid(), (int)region_to_lock.l_start,Β Β (int)(region_to_lock.l_start + region_to_lock.l_len));Β res = fcntl(file_desc, F_SETLKW, &region_to_lock);Β if (res == -1) {Β printf("Process %d β failed to lock region\n", getpid());Β } else {Β printf("Process %d β obtained lock, on region\n", getpid());Β }printf ("Process %d ending\n", getpid());Β close(file_desc);Β exit(EXIT_SUCCESS);}ΠΡΠ»ΠΈ Π²Ρ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ lock3 Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π΄Π°Π»Π΅Π΅ ΡΡΠ°Π·Ρ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
$ .<b>/lock3 &</b>$ process 227 locking file$ <b>./lock5</b>ΠΡ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄:
Process 227 locking fileProcess 228, trying F_RDLCK, region 10 to 15Process 228 β obtained lock on regionProcess 228, trying F_UNLCK, region 10 to 15Process 228 β unlocked regionProcess 228, trying F_UNLCK, region 0 to 50Process 228 β unlocked regionProcess 228, trying F_WRLCK, region 16 to 21Process 228 β failed to lock on regionProcess 228, trying F_RDLCK, region 4 0 to 50Process 228 - failed to lock on regionProcess 228, trying F_WRLCK with wait, region 16 to 21Process 227 closing fileProcess 228 β obtained lock on regionProcess 228 endingΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΎΠΊ Ρ 10-Π³ΠΎ ΠΏΠΎ 15-ΠΉ Π±Π°ΠΉΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°, Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ, ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Ρ ΡΡΠ°ΡΡΠΊΠ° ΡΠ°ΠΉΠ»Π°, ΠΈ ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΎΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΠ°Π»Π΅Π΅ ΠΎΠ½Π° ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ 50 Π±Π°ΠΉΡΠΎΠ² ΡΠ°ΠΉΠ»Π°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ Π½ΠΈΡ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΎΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π½Π° ΡΡΠΎΡ ΡΡΠ°ΡΡΠΎΠΊ, ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΠ½ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΠ°ΡΠ°ΡΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΡΡ 50 Π±Π°ΠΉΡΠΎΠ² Π΄Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΎΠΊ Ρ 16-ΡΠΎ ΠΏΠΎ 21-ΠΉ Π±Π°ΠΉΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ. ΠΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π½ΠΎΠ²Π°Ρ ΠΏΠΎΠΏΡΡΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ, Ρ.ΠΊ. Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°.Β
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ±ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° ΡΡΠ°ΡΡΠΎΠΊ Ρ 40-Π³ΠΎ ΠΏΠΎ 50-ΠΉ Π±Π°ΠΉΡΡ. ΠΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ½ΠΎΠ²Π° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΏΡΡΡ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ ΡΡΠ°ΡΡΠΊΠ° Ρ 16-Π³ΠΎ ΠΏΠΎ 21-ΠΉ Π±Π°ΠΉΡΡ, Π½ΠΎ Π² ΡΡΠΎΡ ΡΠ°Π· ΠΎΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
F_SETLKWsleep