Синтаксический анализ файлов. Динамические массивы. Массивы указателей. Линейные списки. Ассоциативные (хэш) массивы

Страницы работы

9 страниц (Word-файл)

Содержание работы

Задания для лабораторных работ по курсам программирования специальности
”Вычислительные машины, системы, комплексы и сети"

Задание 1: Синтаксический анализ файлов

Вариант А:

Задан файл следующего формата (таблица с разделителями) – база данных пользовательских учетных записей UNIX:

# comment8

8

username:password:UID:GID:comment:home:shell8

username:password:UID:GID:comment:home:shell8

username:password:UID:GID:comment:home:shell8

где # -             символ начала комментария,
8 -           символ разделителя записей,
: -                    символ разделителя полей записи,
comment –        незначащий комментарий,
username –       имя пользователя (строка),
password –       пароль пользователя (строка),
UID –               идентификатор пользователя (короткое целое),
GID –               идентификатор первичной группы пользователя (короткое целое),
comment –        комментарий к учетной записи пользователя (строка),
home –             путь к домашнему каталогу пользователя (строка),
shell –            путь к начальному интерпретатору пользователя (строка).

Разработать определения типов uid_t, gid_t и структуры struct passwd и следующие функции доступа к записям базы данных пользователей UNIX:

struct passwd *getpwnam(char *username); -  поиск записи по имени пользователя username;

struct passwd *getpwuid(uid_t uid); -       поиск записи по идентификатору пользователя uid;

void setpwent(void); -                      открытие базы данных учетных записей пользователей;

struct passwd *getpwent(void); -            чтение очередной записи из базы данных учетных записей пользователя;

void endpwent(void); -                      закрытие базы данных учетных записей пользователей.

Функции должны возвращать указатель на структуру следующего вида:

struct passwd {

char       *pw_name;

char       *pw_passwd;

uid_t      pw_uid;

gid_t      pw_gid;

char       *pw_gecos;

char       *pw_dir;

char       *pw_shell;

};

Вариант Б:

Задан файл следующего формата (классическая таблица) – таблица файловых систем UNIX:

# comment8

8

device<sp>mountpoint<sp>fstype<sp>options<sp>freq<sp>passno8 device<sp>mountpoint<sp>fstype<sp>options<sp>freq<sp>passno8

device<sp>mountpoint<sp>fstype<sp>options<sp>freq<sp>passno8

где # -             символ начала комментария,
8 -           символ разделителя записей,
<sp> –             пробельный символ (совокупность символов пробела и символов табуляции в любом количестве и сочетании),
device –          устройство (строка),
mountpoint –   точка монтирования (строка),
fstype –          тип файловой системы (строка),
options –        опции монтирования (строка),
freq –             частота резервного копирования (целое),
passno –          порядковый номер монтирования (целое).

Разработать определение структуры struct mntent и следующие функции доступа к записям таблица файловых систем UNIX:

FILE *setmntent( const char *filename,

                 const char *type); -       открытие таблицы файловых систем, располагающейся в файле filename;

struct mntent *getmntent(FILE *fp); -       чтение очередной записи из открытой таблицы fp файловых систем;

int endmntent(FILE *fp); -                  закрытие таблицы файловых систем, располагающейся в файле filename;

int addmntent( FILE *fp,

              const struct mntent *mnt); - добавление новой записи mnt в конец открытой таблицы fp файловых систем.

Функции должны возвращать/принимать указатель на структуру следующего вида:

struct mntent {

char       *mnt_fsname;

char       *mnt_dir;

char       *mnt_type;

char       *mnt_opts;

int        mnt_freq;

int        mnt_passno;

};

Вариант В:

Задан файл следующего формата – конфигурационный файл UNIX:

# comment8

8

<sp>parameter<sp>:<sp>value<sp>8

<sp>parameter<sp>:<sp>value<sp>8

<sp>parameter<sp>:<sp>value<sp>8

или файл следующего формата – конфигурационный файл UNIX:

# comment8

8

<sp>parameter<sp>=<sp>value<sp>8

<sp>parameter<sp>=<sp>value<sp>8

<sp>parameter<sp>=<sp>value<sp>8

или файл следующего формата – конфигурационный файл UNIX:

# comment8

8

<sp>parameter<sp>value<sp>8

<sp>parameter<sp>value<sp>8

<sp>parameter<sp>value<sp>8

где # -             символ начала комментария,
8 -           символ разделителя записей,
: или = -    символ разделителя имен и значений конфигурационных параметров,
<sp> –             пробельный символ (совокупность символов пробела и символов табуляции в любом количестве [включая ноль] и сочетании),
parameter –     имя конфигурационного параметра (строка),
value –            значение конфигурационного параметра (строка).

Разработать определение структуры struct cfgent и следующие функции доступа к записям конфигурационных файлов UNIX:

FILE *setcfgent( const char *filename,

                 const char separator,

                 const char *type); -       открытие конфигурационного файла filename, использующего разделитель имен и значений конфигурационных параметров separator;

struct cfgent *getcfgnam(char *parameter); -     поиск конфигурационной записи по имени параметра parameter;

struct cfgent *getcfgent(FILE *fp); -       чтение очередной конфигурационной записи из открытого конфигурационного файла fp;

int endсfgent(FILE *fp); -                  закрытие конфигурационного файла fp;

int addсfgent( FILE *fp,

              const struct cfgent *cfg); - добавление новой конфигурационной записи cfg в конец открытого конфигурационного файла fp.

Функции должны возвращать/принимать указатель на структуру следующего вида:

struct cfgent {

char       *cfg_name;

char       *cfg_value;

};

Задание 2: Динамические массивы

Вариант А:

Упражнение 2.1а:

Разработать функции, организующие чтение файла учетных записей пользователей и размещение информации в виде динамического массива структур struct passwd.

Упражнение 2.2а:

Разработать функции, организующие сохранение информации из динамического массива структур struct passwd в файл учетных записей пользователей.

Вариант Б:

Упражнение 2.1б:

Похожие материалы

Информация о работе