Программа FLOCK
Приведем пример программы FLOCK (листинг 21), выполняющей блокирование файлов средствами сетевой оболочки.
Вначале программа в цикле запрашивает пути к блокируемым файлам до тех пор, пока оператор вместо имени файла не введет символ "-". Каждый введенный файл добавляется в группу при помощи функции LogFile().
Затем вся группа блокируется функцией LockFileSet().
Далее программа ожидает нажатия на любую клавишу. Попробуйте просмотреть содержимое заблокированных файлов с другой рабочей станции - это у вас не получится.
После того как вы нажмете на любую клавишу, программа разблокирует группу файлов при помощи функции ReleaseFileSet() и удалит саму группу, вызывая функцию ClearFileSet(). Файлы, разумеется, не удаляются с диска, удаляется только группа путей к файлам, которая использовалась для блокирования.
// =================================================== // Листинг 21. Блокирование файлов // Файл flock\flock.cpp // // (C) A. Frolov, 1993 // ===================================================
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <conio.h>
#define BYTE unsigned char #define WORD unsigned int
extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int LogFile(char *, BYTE, WORD); extern "C" int LockFileSet(WORD); extern "C" void ReleaseFileSet(void); extern "C" void ClearFileSet(void);
void main(void) {
char MajorVersion=0; char MinorVersion=0; char Revision=0;
char FilePath[255];
int ccode;
printf("\n*FLOCK* (C) Frolov A., 1993\n");
// Проверяем наличие сетевой оболочки
asm push si GetNetWareShellVersion(&MajorVersion, &MinorVersion, &Revision); asm pop si
if(MajorVersion == 0) { printf("\nОболочка NetWare не загружена\n"); return; }
// Создаем набор файлов, которые будут заблокированы
for(;;) { printf("\nВведите путь к файлу или '-':"); gets(FilePath);
strupr(FilePath); if(FilePath[0] == '-') break;
// Добавляем файл в набор
ccode = LogFile(FilePath, 0, 0);
if(!ccode) printf("Файл %s добавлен к списку\n", FilePath); else printf("Ошибка при добавлении %02.2X\n", ccode); }
// Блокируем набор файлов
ccode = LockFileSet(0);
if(!ccode) printf("Файлы заблокированы\n"); else printf("Ошибка при блокировании " "файлов %02.2X\n", ccode);
printf("Для разблокирования файлов нажмите любую клавишу\n"); getch();
// Разблокируем набор файлов
ReleaseFileSet();
// Удаляем набор файлов
ClearFileSet(); }