[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Печать отчета - Пример

Этот пример использует lockf(3C) для захвата по изменению всего файла
служащих перед печатью отчета. Аналогичная программа была приведена
раньше в этом разделе, только теперь вместо fcntl(2) используется
lockf(3C).
Программа работает следующим образом:
   ...    Файл служащих открывается для чтения и записи.

   19     Захватывается  весь  файл.  Программа  делает  пять  попыток
          захватить файл.

   ...    Печатается имя и оклад служащего.

   41     Текущий указатель устанавливается на начало файла.

   42     Файл освобождается.

Файл: report2.c
                        ПЕЧАТЬ ОТЧЕТА - ПРИМЕР
                             ЗАХВАТ ФАЙЛА
 1 #include <sys/types.h>
 2 #include <stdio.h>
 3 #include <fcntl.h>
 4 #include <unistd.h>
 5 #include <stdlib.h>
 6 #include <errno.h>
 7 #include "employee.h"
 8 #define   MAXTRIES   5
 9
10 main(int argc, char *argv[])
11 {
...
19     while (lockf(fd, F_TLOCK, 0) == -1) {
20         if ((errno == EACCES) || (errno == EAGAIN)) {
21             if (try++ < MAXTRIES) {
22                 sleep(1);
23                 continue;
24             }
25             printf("%s busy -- try later\n",
26                 argv[1]);
27             exit(2);
28         }
29         perror(argv[1]);
30         exit(3);
31     }
...
41     lseek(fd, 0, SEEK_SET);
42     lockf(fd, F_ULOCK, 0);
...
44 }