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

Программа FSCAN


Приведем программу FSCAN (листинг 17), которая выводит список файлов, расположенных в каталоге, путь к которому задается в качестве параметра при запуске программы. Для каждого найденного в каталоге файла программа выводит имя файла, его размер, байт атрибутов и байт расширенных атрибутов, а также имя пользователя, создавшего файл.

// =================================================== // Листинг 17. Просмотр списка файлов в каталоге // Файл fscan\fscan.cpp // // (C) A. Frolov, 1993 // ===================================================

#include <stdlib.h> #include <stdio.h> #include <string.h> #include <time.h>

#define BYTE unsigned char #define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int _ScanFileInformation(BYTE, char *, BYTE, int *, char *, BYTE *, BYTE *, long *, char *, char *, char *, char *, long *); extern "C" int GetBinderyObjectName(long, char *, WORD *);

void main(int argc, char *argv[]) {

char MajorVersion=0; char MinorVersion=0; char Revision=0;

int SequenceNumber; char FileName[16]; BYTE FileAttributes; BYTE ExtendedFileAttributes; long FileSize; BYTE CreationDate[2]; BYTE LastAccessDate[2]; BYTE LastUpdateDateAndTime[4]; BYTE LastArchiveDateAndTime[4]; long FileOwnerID;

int ccode;

char ObjectName[48]; WORD ObjectType;

printf("\n*FSCAN* (C) Frolov A., 1993\n");

// Проверяем наличие сетевой оболочки

asm push si GetNetWareShellVersion(&MajorVersion, &MinorVersion, &Revision); asm pop si



if(MajorVersion == 0) { printf("\nОболочка NetWare не загружена\n"); return; }

// В качестве аргумента необходимо задать // путь к просматриваемому каталогу в виде SYS:USERS\*

if(argc < 2) { printf("Укажите путь к каталогу, " "например: dirscan sys:users\\*\n"); return; } printf("Список файлов в каталоге %s\n", argv[1]); printf("--------------------------------------------" "-------------\n"); printf("Имя \tРазмер\tАтрибуты\tВладелец\n"); printf("--------------------------------------------" "-------------\n");


// Путь должен быть задан заглавными буквами

strupr(argv[1]);

// Цикл просмотра каталога

for(SequenceNumber = 0xFFFF;;) {

// Получаем информацию о содержимом каталога

ccode = _ScanFileInformation(0, argv[1], 6, &SequenceNumber, FileName, &FileAttributes, &ExtendedFileAttributes, &FileSize, CreationDate, LastAccessDate, LastUpdateDateAndTime, LastArchiveDateAndTime, &FileOwnerID);

// Если были ошибки, завершаем цикл

if(ccode) break; if(FileName[0] == '\0') break;

// Выводим имя файла

printf("%-12s", FileName);

// Выводим размер файла

printf("\t%ld", FileSize);

// Выводим байт атрибутов и байт расширенных атрибутов

printf("\t%02.2X %02.2X\t", FileAttributes, ExtendedFileAttributes); // Если для каталога определен владелец, // получаем и выводим имя владельца

if(FileOwnerID) { GetBinderyObjectName(FileOwnerID, ObjectName, &ObjectType); printf("\t%-12s \n", ObjectName); } else printf("\t <Нет сведений о владельце> \n"); } }

Приведем фрагменты выдачи программы FSCAN при просмотре файлов из каталога SYS:SYSTEM файл-сервера Novell NetWare версии 3.11:

*FSCAN* (C) Frolov A., 1993 Список файлов в каталоге sys:system\* --------------------------------------------------------- Имя Размер Атрибуты Владелец --------------------------------------------------------- SYS$LOG.ERR 10852 20 00 SYSPRG README.BTR 6689 00 00 SUPERVISOR

***************

CLIB.NLM 232842 81 00 SYSPRG 3C503.LAN 11856 81 00 SYSPRG PS2MFM.DSK 8759 81 00 SYSPRG INSTALL.NLM 160613 81 00 SYSPRG NE2000.LAN 11636 81 00 SYSPRG

***************

BCONNLM.HLP 1583 81 00 SYSPRG BROUTER.NLM 15884 81 00 SYSPRG BTRIEVE.NLM 64616 01 00 SYSPRG NET$OBJ.SYS 2560 26 10 FROLOV BTRIEVE.TRN 4096 00 00 SYSPRG PRODUCTS.DAT 5120 00 00 SYSPRG AUTOEXEC.NCF 203 00 00 SYSPRG MODEM.CFG 46 00 00 FROLOV IBM$EMS.HLP 84047 00 00 FROLOV IBM$DRV.OVL 2144 00 00 FROLOV IBM$EMS.OVL 405 00 00 FROLOV VIR.DAT 29934 20 00 FROLOV NET$PROP.SYS 8364 26 10 FROLOV NET$VAL.SYS 33654 26 10 FROLOV NETSHLD.NLM 246146 20 00 FROLOV VIR$CFG.DAT 838 20 00 SYSPRG VIR$LOG.DAT 3146 20 00 SYSPRG

Файлы с атрибутами 00h и 20h - обычные файлы. Файлы с атрибутами 26h - скрытые и системные. Файл BTRIEVE.NLM имеет байт атрибутов 01, этот файл можно только читать. Файлы с атрибутом 81 - только читаемые файлы, к которым возможен одновременный доступ со стороны нескольких пользователей.

В приведенном выше списке есть файлы, у которых установлен бит Transaction Bit. Для этих файлов включен механизм обработки транзакций, гарантирующий сохранность содержимого файла при аварии в электропитающей сети или по другим аналогичным причинам.


Содержание раздела