Локальные сети персональных компьютеров. Работа с сервером Novell NetWare


Блокирование файлов


В этом разделе мы рассмотрим методы синхронизации работы программ, основанные на блокировании файлов.

Принцип блокирования файлов достаточно прост. Например, в MS-DOS, если запущена программа SHARE.EXE, программа, открывая файл, может указать, что этот файл будет использоваться ей монопольно. При попытке открыть этот файл еще раз другая программа получит от соответствующей функции MS-DOS код ошибки.

Для открывания файлов из программы, составленной на языке программирования C (или C++), удобно использовать функцию open():

int open(const char *path, int access [, unsigned mode]);

Для использования этой функции ваша программа должна содержать следующие две строки:

#include <fcntl.h> #include <sys\stat.h>

Функция возвращает индекс (handle) открытого файла или -1 в случае ошибки.

Параметр path указывает путь к открываемому файлу.

Параметр access определяет режим доступа к открываемому файлу. Вы можете использовать символические константы (их можно объединять при помощи логической операции ИЛИ):

Константа Значение
O_RDONLY Открыть файл только для чтения
O_WRONLY Открыть файл только для записи
O_RDWR Открыть файл для чтения и записи
O_APPEND Добавлять записываемые данные в конец файла
O_CREAT Создать файл и открыть его. Если файл уже существует, ничего не происходит. Если файл не существует, он создается и открывается
O_EXCL Этот режим используется только вместе с режимом O_CREAT. Если файл уже существует, возвращается признак ошибки
O_TRUNC Открыть файл и установить для него нулевую длину
O_BINARY Файл открывается в двоичном режиме
O_TEXT Файл открывается в текстовом режиме. Для него выполняется преобразование байтов CR-LF в '\n'
O_DENYNONE К файлу разрешен множественный доступ со стороны нескольких программ, т. е. этот файл может быть открыт несколько раз
O_DENYALL Этот файл может быть открыт только один раз. Если другая программа попытается открыть файл для чтения или для записи, она получит признак ошибки
O_DENYWRITE Другая программа не может открыть этот файл еще раз для записи, но она может открыть его для чтения
O_DENYREAD Другая программа не может открыть этот файл еще раз для чтения, но она может открыть его для записи
<


- Начало -  - Назад -  - Вперед -