Создаем набор файлов, которые будут
Листинг 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();
}
Листинг 22
Блокирование физических записей файлов // Файл physlock\physlock.cpp // // (C) A. Frolov, 1993 // =================================================== #include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <fcntl.h>
#include <io.h>
#include <sys\stat.h>
#include <share.h>
#define BYTE unsigned char #define WORD unsigned int extern "C" int GetNetWareShellVersion(char *,char *, char *);
extern "C" int LogPhysicalRecord(int, long, long, BYTE, WORD);
extern "C" int LockPhysicalRecordSet(BYTE, WORD);
extern "C" void ReleasePhysicalRecordSet(void);
extern "C" void ClearPhysicalRecordSet(void);
void main(void) { char MajorVersion=0; char MinorVersion=0; char Revision=0; char FilePath[255]; int FileHandle; char Buff[80]; long RecordStartOffset; long RecordLength; int ccode; printf("\n*PHYSLOCK* (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; // Открываем файл, в котором мы будем блокировать физические записи if ((FileHandle = open(FilePath, O_RDWR | O_BINARY | O_DENYNONE, SH_DENYNONE)) == -1) { printf("Не могу открыть файл\n");
continue; } // Задаем начало и размер блокируемой области файла printf("\nВведите смещение начала записи:");
gets(Buff);
RecordStartOffset = atol(Buff);
printf("\nВведите размер записи:");
gets(Buff);
RecordLength = atol(Buff);
// Добавляем запись в набор ccode = LogPhysicalRecord(FileHandle, RecordStartOffset, RecordLength, 0, 0);
if(!ccode) printf("Файл %s добавлен к списку\n", FilePath);
else printf("Ошибка при добавлении %02.2X\n", ccode);
} // Блокируем набор файлов ccode = LockPhysicalRecordSet(0, 0);
if(!ccode) printf("Записи файлов заблокированы\n");
else printf("Ошибка при блокировании " "записей файлов %02.2X\n", ccode);
printf("Для разблокирования записей " "файлов нажмите любую клавишу\n");
getch();
// Разблокируем набор файлов ReleasePhysicalRecordSet();
// Удаляем набор файлов ClearPhysicalRecordSet();
// Закрываем файл close(FileHandle);
}