[<<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);
...