[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
ðÅÞÁÔØ ÏÔÞÅÔÁ - ðÒÉÍÅÒ
üÔÏÔ É ÄÒÕÇÉÅ ÐÒÉÍÅÒÙ × ÜÔÏÍ ÒÁÚÄÅÌÅ ÞÉÔÁÀÔ É ÉÚÍÅÎÑÀÔ ÆÁÊÌ ÄÁÎÎÙÈ Ï
ÓÌÕÖÁÝÉÈ. úÁÈ×ÁÔÙ ÐÏ ÚÁÐÉÓÉ É ÉÚÍÅÎÅÎÉÀ ÉÓÐÏÌØÚÕÀÔÓÑ, ÞÔÏÂÙ ÚÁÐÒÅÔÉÔØ
ÎÅÓËÏÌØËÉÍ ÐÒÏÃÅÓÓÁÍ ÉÚÍÅÎÑÔØ ÏÄÎÕ É ÔÕ ÖÅ ÚÁÐÉÓØ × ÏÄÎÏ É ÔÏ ÖÅ
×ÒÅÍÑ.
úÁÐÉÓØ Ï ÓÌÕÖÁÝÅÍ ×ÙÇÌÑÄÉÔ ÓÌÅÄÕÀÝÉÍ ÏÂÒÁÚÏÍ:
employee.h:
1 #define NAMESIZE 24
2
3 struct employee {
4 char name[NAMESIZE];
5 int salary;
6 unsigned short uid;
7 };
ïÎÁ ÓÏÄÅÒÖÉÔ ÉÍÑ ÓÌÕÖÁÝÅÇÏ, ÅÇÏ ÏËÌÁÄ É ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ,
ËÏÔÏÒÙÊ ÐÏÓÌÅÄÎÉÍ ÉÚÍÅÎÉÌ ÜÔÕ ÚÁÐÉÓØ.
üÔÁ ÐÒÏÇÒÁÍÍÁ ×Ù×ÏÄÉÔ ÓÏÄÅÒÖÁÎÉÅ ÆÁÊÌÁ ÓÌÕÖÁÝÉÈ. ÷ÅÓØ ÆÁÊÌ
ÚÁÈ×ÁÔÙ×ÁÅÔÓÑ ÐÏ ÞÔÅÎÉÀ, ÞÔÏÂÙ ÎÅ ÄÏÐÕÓÔÉÔØ ÉÚÍÅÎÅÎÉÅ ÌÀÂÏÊ ÚÁÐÉÓÉ ÐÒÉ
ÐÅÞÁÔÁÎÉÉ ÏÔÞÅÔÁ. üÔÏ ÇÁÒÁÎÔÉÒÕÅÔ, ÞÔÏ ÏÔÞÅÔ ÂÕÄÅÔ ÔÏÞÎÙÍ ÏÔÒÁÖÅÎÉÅÍ
ÔÅËÕÝÅÇÏ ÓÏÓÔÏÑÎÉÑ ÆÁÊÌÁ ÓÌÕÖÁÝÉÈ. úÁÈ×ÁÔ ×ÓÅÇÏ ÆÁÊÌÁ ÎÅ ÐÒÉÞÉÎÉÔ
ÎÅÕÄÏÂÓÔ×Á, ÅÓÌÉ ÏÔÞÅÔ ÐÅÞÁÔÁÅÔÓÑ ÔÏÇÄÁ, ËÏÇÄÁ ÆÁÊÌ ÓÌÕÖÁÝÉÈ ÎÅ
ÉÓÐÏÌØÚÕÅÔÓÑ ÎÉËÅÍ ÄÒÕÇÉÍ.
ëÏÄ, ÐÏËÁÚÁÎÎÙÊ ÎÁ ÓÌÅÄÕÀÝÅÊ ÓÔÒÁÎÉÃÅ, ÓÏÄÅÒÖÉÔ ÔÏÌØËÏ ÚÁÈ×ÁÔ É
ÏÓ×ÏÂÏÖÄÅÎÉÅ ÚÁÐÉÓÉ. ÷ÓÑ ÐÒÏÇÒÁÍÍÁ ÐÒÉ×ÅÄÅÎÁ × ËÏÎÃÅ ÒÁÚÄÅÌÁ.
ðÒÏÇÒÁÍÍÁ ÒÁÂÏÔÁÅÔ ÓÌÅÄÕÀÝÉÍ ÏÂÒÁÚÏÍ:
... æÁÊÌ ÓÌÕÖÁÝÉÈ, ÐÏÌÕÞÅÎÎÙÊ ËÁË ÐÅÒ×ÙÊ ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÎÏÊ
ÓÔÒÏËÉ, ÏÔËÒÙ×ÁÅÔÓÑ ÄÌÑ ÞÔÅÎÉÑ.
18-22 ðÏÌÑÍ ÓÔÒÕËÔÕÒÙ ÚÁÈ×ÁÔÁ ÐÒÉÓ×ÁÉ×ÁÀÔÓÑ ÚÎÁÞÅÎÉÑ,
ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ ×ÙÐÏÌÎÅÎÉÀ ÚÁÈ×ÁÔÁ ÐÏ ÞÔÅÎÉÀ.
23-33 ãÉËÌ ÐÙÔÁÅÔÓÑ ÐÑÔØ ÒÁÚ ÚÁÈ×ÁÔÉÔØ ÆÁÊÌ. fcntl ÚÁ×ÅÒÛÁÅÔÓÑ
ÎÅÕÄÁÞÎÏ, ÅÓÌÉ ÇÄÅ-ÌÉÂÏ × ÆÁÊÌÅ ÕÖÅ ÅÓÔØ ÚÁÈ×ÁÔ ÐÏ ÚÁÐÉÓÉ.
åÓÌÉ ÐÒÏÇÒÁÍÍÁ ÔÁË É ÎÅ ÓÍÏÇÌÁ ÚÁÈ×ÁÔÉÔØ ÆÁÊÌ, ÐÅÞÁÔÁÅÔÓÑ
ÓÏÏÂÝÅÎÉÅ Ï ÏÛÉÂËÅ, ÒÅËÏÍÅÎÄÕÀÝÅÅ ÐÏÌØÚÏ×ÁÔÅÌÀ ÉÓÐÏÌÎÉÔØ
ÐÒÏÇÒÁÍÍÕ ÐÏÚÖÅ.
... ïÔÓÕÔÓÔ×ÕÀÝÉÊ ËÏÄ ÐÅÞÁÔÁÅÔ ÚÁÐÉÓÉ Ï ÓÌÕÖÁÝÉÈ É ÓÕÍÍÁÒÎÙÊ
ÏËÌÁÄ.
42-44 ðÅÒÅÄ ÚÁ×ÅÒÛÅÎÉÅÍ ÐÒÏÇÒÁÍÍÙ ÚÁÈ×ÁÔ ÐÏ ÞÔÅÎÉÀ ÓÎÉÍÁÅÔÓÑ.
æÁÊÌ: report1.c
ðåþáôø ïôþåôá - ðòéíåò
úáè÷áô æáêìá ðï þôåîéà
1 #include <sys/types.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <fcntl.h>
6 #include <errno.h>
7 #include "employee.h"
8 #define MAXTRIES 5
9 main(int argc, char *argv[])
10 {
11 struct flock lock;
...
18 lock.l_type = F_RDLCK;
19 lock.l_whence = SEEK_SET;
20 lock.l_start = 0;
21 lock.l_len = 0; /* whole file address space */
22 while (fcntl(fd, F_SETLK, &lock) == -1) {
23 if ((errno == EACCES) || (errno == EAGAIN)) {
24 if (try++ < MAXTRIES) {
25 sleep(1);
26 continue;
27 }
28 printf("%s busy -- try later\n",
29 argv[1]);
30 exit(2);
31 }
32 perror(argv[1]); exit(3);
33 }
...
42 lock.l_type = F_UNLCK; /* unlock file */
43 fcntl(fd, F_SETLK, &lock);
44 close(fd);
...