[<<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 }