Расширение функционала программного комплекса коллективной разработки для групповой работы с базовыми функциями операционной системы Linux

Системные вызовы и библиотечные функции. Требования к программе и программному изделию. Функция отображения списка имен файлов правой панели, удаления, перемещения и переименования, выдачи сообщения об ошибках. Порядок создания собственных библиотек.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.08.2012
Размер файла 935,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Оглавление

Техническое задание

Используемые системные вызовы и библиотечные функции

Обработка клавиш Home и End

Функция отображения списка имен файлов правой панели

Функция удаления

Функция перемещения

Функция переименования

Функция выдачи сообщения об ошибке

Порядок создания собственных библиотек

Список использованной литературы:

Скриншоты

Техническое задание

Назначение разработки

Наименование темы разработки: «Расширение функционала программного комплекса коллективной разработки для групповой работы с базовыми функциями операционной системы Linux».

Условное обозначение темы разработки: «Программный комплекс».

Программный комплекс предназначен для закрепления практических навыков при изучении дисциплины «Системное программное обеспечение», связанных с изучением системных функций ОС Linux.

Программный комплекс служит базой для реализации высокоуровневых функций файловой системы и системы управления процессами при помощи сервисных средств ОС и стандартных библиотек языка Си.

Требования к программе или программному изделию

Требования к функциональным характеристикам

Доработка программного комплекса состоит в добавлений функций:

1) перемещения\переименования файла для непустых каталогов, вызываемое клавишей F6, в результате чего должно появляться окно, в котором следует указать новое имя и\или расположение файла.

2) удаления одиночных, вызываемой клавишей F8.

3) Навигации с помощью клавишь HOME и END, перемещающих курсор на первый и последний элемент соответственно.

4) интерфейс должен состоять из двух навигационных панелей, в которых справа от имен файлов отображается ID владельца и их типы.

Навигация по содержимому каталогов должна осуществляться с помощью клавиш со стрелками, навигация по каталогам - с помощью клавиши ENTER.

Выход из программы должен осуществляться по нажатию клавиши ESC.

Выходными данными являются элементы отображаемых каталогов.

Исходным каталогом, содержимое которого должно отображаться при запуске системы, должен быть домашний каталог пользователя.

Программный комплекс обладает следующими особенностями:

· отображение текущего каталога в верхней части панели;

· вывод о типе текущего элемента каталога в строке статуса (обычный файл, каталог, ссылка, файл устройства);

· сохранение текущей позиции курсора при смене панелей;

· игнорирование нажатия клавиш, не входящий в список предопределённых.

· выдача сообщения об ошибке при попытке входа (чтения) в каталог, при отсутствии соответствующих прав доступа.

· игнорирование действий пользователя при нажатии на клавишу Enter в том случае, когда текущий элемент не является каталогом.

Требования к надежности

Для обеспечения надёжной работы программ, каждой из них следует:

выполнить обработку ошибок при вызове системных и стандартных библиотечных функций;осуществлять выделение и освобождение памяти при работе со строками и списками.

Условия эксплуатации

Условия эксплуатации программного комплекса совпадают с условиями эксплуатации ПЭВМ IBM PC и совместимых с ними ПК.

Требования к составу и параметрам технических средств

Для работы программного комплекса необходимо наличие IBM PC-совместимого ПК с графическим адаптером EGA (VGA). Требования к объёму дискового пространства и размеру оперативной памяти не превышают требований к базовой ОС Linux.

Требования к информационной и программной совместимости

Программы комплекса должны работать автономно под управлением ОС Linux и удовлетворять требованиям совместимости стандарта POSIX. Исключение - средства библиотеки curses для отображения визуальной информации.

Все вызовы системных функций должны сопровождаться обработкой возможных ошибок.

Базовый язык программирования - C.

«Файловый менеджер» представляет собой одиночную программу, реализующую двух-панельный интерфейс для отображения и навигации по операционной системе Linux.

При работе с элементами каталога в программе «Файловый менеджер» должны использоваться связные списки для обеспечения работы с каталогами любого размера.

При работе со строками следует пользоваться типом char* и осуществлять выделение памяти для строк в динамической области. Освобождение памяти для элементов списка и строк следует производить в той же функции, в которой производилось выделение.

Для ограничения длины строки при отображении имён файлов следует использовать константу максимального размера длины строки.

Для работы с цветом следует использовать константы, типы и переменные библиотеки curses.

Пользовательские программные функции, константы, глобальные переменные и пользовательские типы разместить в отдельных модулях. Указанные модули поместить в статическую библиотеку пользователя.

При реализации обработки нажатия клавиш недопустимые комбинации и отдельные коды должны игнорироваться.

Требования к маркировке и упаковке и требования к транспортированию и хранению

Не требуется

Специальные требования

Специальных требований к временным характеристикам программы не предъявляется.

Специальных требований к ёмкостным характеристикам программы не предъявляется.

Программы комплекса не должны завершаться аварийно при нештатных действиях пользователя - при нажатии клавиш, не входящих в состав предопределённых, при попытке несанкционированного входа в каталоги.

Стадии и этапы разработки

Срок доработки программного комплекса - 3 месяца: с 9.02.2012 по 9.05.2012.

Срок разработки программной документации - 2 месяца: с 9.03.2012 по 9.05.2012.

Исполнитель - студент ФИТ 2-2 Снытко А.С.

Разработка ТЗ и эскизного проекта с 9.02.2012 по 29.03.2012.

Разработка технического проекта с 1.04.2012 по 30.04.2012.

Разработка рабочего проекта с 1.05.2012 по 30.05.2012.

Порядок контроля и приемки

Испытания программного комплекса должны быть проведены на ПК кафедры ЭВМ (лаборатория вычислительной техники, ауд. 239 эн.), работающих под управлением OC Lnux SuSE 12 и Ubuntu 9.04.

Контроль и приемка «Менеджера процессов» должна быть проведена на основе контрольно-отладочных примеров, предусматривающих передачу различных данных между взаимодействующими процессами.

При проведении приёмки программного комплекса проверяется выполнение всех функций программ.

Используемые системные вызовы и библиотечные функции

<DIRENT.H>

Int scandir (const char *dir, struct dirent **namelist, int (*select) (const struct dirent **), int (*compare)(const struct dirent **)) - чтение каталога. Возвращает число элементов в сканируемом каталоге.

const char *dir - каталог для сканирования;

struct dirent **namelist - структура с именами элементов;

int (*select) - функция выбора нужных элементов;

int (*compare) - функция сравнения двух элементов.

<STRING.H>

void* strcpy (const char* newstring, const char* oldstring) - копирование строки oldstring в строку newstring.

void* strcat (const char* instring, const char* outstring) - вставка строки outstring в конец строки instring.

<unistd.h>

<fcntl.h>

int open(const char *pathname, int flags, mode__t mode) - открытиефайла

const char *pathname Строка, представляющая имя открываемого файла.

Int flags поразрядное ИЛИ с одной или более констант, определенных в <fcntl.h>.

mode_tmode режимы доступа для создаваемого файла.

Int close()-закрытие файла

<directory.h>

#ifndef DIRECTORY_H_

#define DIRECTORY_H_

intremf(char*path);

intcutf(char*path, char*pathD);

#endif /*DIRECTORY_H_*/

drawlib.h

#ifndef DRAWLIB_H_

#defineDRAWLIB_H_

//Идентификаторы активной панели

#defineLEFT 0 //метка левой панели

#defineRIGHT 1 //метка правой панели

//Идентификаторы клавиш

#undef KEY_ENTER//переопределение идентефикатора описанного в curses

#defineKEY_ENTER 10//

#defineKEY_ESC 27//определение идентификатора для клавиши Esc

#define KEY_TAB 9

#define WLINES (LINES/4+1) /* высота */

#define WCOLS (COLS/4*2) /* ширина */

#defineWy (LINES/3) /* yверхнеголевогоугланаэкране */

#defineWx (COLS/4) /* x верхнего левого угла на экране */

//макросы цветовых пар

#define BLUE_BLUE COLOR_PAIR(1)

#define GREEN_BLUE COLOR_PAIR(2)

#define BLUE_WHITE COLOR_PAIR(3)

#define BLACK_WHITE COLOR_PAIR(4)

#define WHITE_BLUE COLOR_PAIR(5)

#define RED_BLUE COLOR_PAIR(6)

#define BLACK_YELLOW COLOR_PAIR(7)

#define YELLOW_BLACK COLOR_PAIR(8)

#define BLACK_CYAN COLOR_PAIR(9)

#define RED_CYAN COLOR_PAIR(10)

#define YELLOW_CYAN COLOR_PAIR(11)

#define BLACK_RED COLOR_PAIR(12)

#define WHITE_RED COLOR_PAIR(13)

#define YELLOW_RED COLOR_PAIR(14)

#define WHITE_CYAN COLOR_PAIR(15)

//Функция получения полного имени файла

char* getfullname(char* dirname,char* filename);

//Функция очистки панели

voidclearL();

voidclearR();

//Функция отображения панелей псевдографикой

voiddrawframe();

//Функция отображения списка имен файлов панели

void paintdirL(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs);

void paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs);

//Функция вывода сообщения об ошибке

void printerror (const char* text);

void name(char nn[33]);

#endif /*DRAWLIB_H_*/

Обработка клавиш Home и End:

switch(KEY)

{

case KEY_HOME:

switch(activepanel)

{

case LEFT :

nL=scandir(pathL, &namelistL, 0, alphasort);

if (nL<0) {perror("scandir");endwin();exit(-1);}

upL=1; downL=(LINES-8); positionkursL=1;

paintdirL(pathL,nL,namelistL,upL,downL,positionkursL);

break;

case RIGHT :

nR=scandir(pathR, &namelistR, 0, alphasort);

if (nR<0) {perror("scandir");endwin();exit(-1);}

upR=1;downR=(LINES-8);positionkursR=1;

paintdirR(pathR,nR,namelistR,upR,downR,positionkursR);

}

break;

case KEY_END:

switch(activepanel)

{

case LEFT :

nL=scandir(pathL, &namelistL, 0, alphasort);

if (nL<0) {perror("scandir");endwin();exit(-1);}

for (j=1;j<nL;j++)

{

if(positionkursL<nL-1)positionkursL++;

if(positionkursL>=downL){upL++;downL++;}

}

paintdirL(pathL,nL,namelistL,upL,downL,positionkursL);}

break;

… }

Функция отображения списка имен файлов правой панели

void paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs)

{

struct stat buf;//структура со сведениями о файле

clearR();

drawframe();

attrset(0|BLACK_WHITE);

move(1,COLS/2+1); printw("~%s",strrchr(path,'/'));

int numberline;//номера строк, на которых выводятся имена файлов

numberline=4;//первая строка с именнм

if(down>n) down=n;

for (int i=up;i<down;i++,numberline++)

{

move(numberline,COLS/2+2);attrset(0|GREEN_BLUE);

lstat(getfullname(path,namelist[i]->d_name),&buf);

if(S_ISDIR(buf.st_mode)) attrset(A_BOLD|GREEN_BLUE);

if(i==positionkurs)attrset(A_BOLD|A_UNDERLINE|BLUE_WHITE);

printw("%s",namelist[i]->d_name);

move(numberline,COLS-18);

printw("Uid:%d", buf.st_uid);

if (S_ISDIR(buf.st_mode)) printw (" dir");

else if (S_ISLNK(buf.st_mode)) printw (" link");

else if (S_ISBLK(buf.st_mode)) printw (" block");

else if (S_ISREG(buf.st_mode)) printw (" reg");

else if (S_ISFIFO(buf.st_mode)) printw (" FIFO");

else printw (" -");

attrset(A_BOLD|A_UNDERLINE|BLACK_YELLOW); }

attrset(0|GREEN_BLUE);

move(LINES-4,COLS/2+1);printw(" name: %s ",namelist[positionkurs]->d_name);

refresh();

}

Void paintdirL(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs) - отрисовка левой панели файлового менеджера. Набор параметров и возвращаемое значение аналогичны voidpaintdirR .

Схема алгоритма отображения панели

Функция удаления:

Int remf(char*path);

Данная функция удаляет выбранный файл или каталог с вложенными в него файлами. При удачном завершении каталог или файл удаляются, иначе выводится окно с ошибкой.

Параметры функции:

char* path - путь к текущему объекту;

Используемые библиотеки: <curses.h><dirent.h><stdlib.h><string.h>

<sys/dir.h><sys/stat.h><unistd.h><errno.h>

Тип возвращаемого значения- целое число.

Возвращаемое значение при ошибке -1.

Исходный код:

#include <…>

int remdf(char*path)

{

DIR*dir;

struct dirent*d;

struct stat buf;

stat(path,&buf);

if(access(path,R_OK)<0)

{

printerror("No right of access!");

return -1;

}

if(S_ISDIR(buf.st_mode)!=1)

{

unlink(path);

return 0;

}

else

{

if (rmdir(path)!=0)

{

printerror("DIR is not empty");

}

}

}

Схема алгоритма:

Функция перемещения:

int cutf(char*path, char*pathD);

Функция перемещения файла, либо каталога с вложенными в него файлами. При вызове появляется окно с вводом нового имени, а после файл или каталог перемещаются по заданному пути в соседней панели. При неудачном завершении появится окно с ошибкой.

charbuf[5000] - буфер для чтения/записи;

charn_name[33] - буфер для нового имени;

int file1, file2 - дескрипторыфайлов;

intskr, skw - переменные для чтения/записи;

DIR*dir - каталог;

structdirentd - структура для чтения каталога;

structstattip - структура для получения информации о файлах.

Параметры функции:

char* path - путь к текущему объекту;

char* pathD - новый путь к объекту;

Используемые библиотеки: <fcntl.h><curses.h><dirent.h><stdlib.h><string.h><sys/dir.h><sys/stat.h><unistd.h><errno.h>

Тип возвращаемого значения - целое число.

Возвращаемое значение при ошибке -1.

Схема алгоритма

Исходный код:

intcutf(char*path, char*pathD)

{charbuf[5000];

charn_name[33];

int file1, file2, skr, skw;

DIR*dir;

structdirent*d;

struct stat tip;

stat(path,&tip);

if(!S_ISDIR(tip.st_mode))

{ file1=open(path,O_RDONLY,S_IRWXU);

if(access(path,R_OK)<0)

{if(errno==EACCES)

{printerror("No right of access!");

return -1; } }

name(n_name); file2=open((getfullname(pathD,n_name)), O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR);

skr=read(file1,buf,100);

skw=write(file2,buf,skr);

skr=close(file1);

skw=close(file2);

unlink(path);

return 0; }

else {dir=opendir(path);

if(access(path,R_OK)<0)

{if(errno==EACCES)

{printerror("No right of access!");

return -1; } }

name(n_name);

mkdir(getfullname(pathD,n_name),S_IRWXU);

chdir(path);

rewinddir(dir);

while((d=readdir(dir))!=NULL)

{ if((strcmp(".",d->d_name)==0)||(strcmp("..",d->d_name)==0)) continue;

file1=open(d->d_name,O_RDONLY,S_IRWXU);

file2=open(getfullname(getfullname(pathD,n_name),d->d_name),O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR);

skr=read(file1,buf,100);

skw=write(file2,buf,skr);

skr=close(file1);skr=close(file2);unlink(d->d_name); }

closedir(dir);chdir("..");

rmdir(path);return 0; }}

Функция переименования:

библиотека программный файл переименование

void name(char nn[33]);

Функция переименования. При вызове появляется окно с вводом информации.

Используемые библиотеки: данные функции находятся в файле drawlib.cpp поэтому библиотеки там уже были подключены заранее

Тип возвращаемого значения - void.

Схема алгоритма

Исходный код:

void name(char nn[33])

{WINDOW*w;

const char*namewin="Move/Rename";

w=newwin(WLINES,WCOLS,Wy+1,Wx+1);

wrefresh(w);wattrset(w,COLOR_PAIR(10));werase(w);box(w,0,0);

wmove(w,0,(WCOLS-strlen(namewin))/2);wattrset(w,COLOR_PAIR(12));

wprintw(w," %s ",namewin);wattrset(w,COLOR_PAIR(10));

for(inti=1;i<=(WCOLS-2);i++)

for(int j=1;j<=(WCOLS-2);j++)

mvwaddstr(w,j,i," ");mvwaddstr(w,WLINES/2-2,(WCOLS-16)/2,"Input new name");

wattrset(w,COLOR_PAIR(10));mvwaddstr(w,WLINES/2+2,(WCOLS-2)/2,"OK");

wattrset(w,COLOR_PAIR(4));for(inti=3;i<=(WCOLS-4);i++)

mvwaddstr(w,WLINES/2,i," ");wmove(w,WLINES/2,3);echo();

curs_set(1);wgetstr(w,nn);noecho();curs_set(0);delwin(w);

}

Функция выдачи сообщения об ошибке:

void printerror(const char* text);

Функция выводит окно с ошибкой.

Используемые библиотеки: данные функции находятся в файле drawlib.cpp поэтому библиотеки там уже были подключены заранее

Тип возвращаемого значения - void.

Исходный код:

void printerror(const char* text)

{

WINDOW *w; beep();

w = newwin( WLINES, WCOLS, Wy+1, Wx+1);

noecho(); curs_set(0); wrefresh(w);

wattrset(w,A_BOLD|COLOR_PAIR(8));

werase(w);

box(w,0,0);

wmove(w,0,(WCOLS-8)/2);

wattrset(w,A_BOLD|COLOR_PAIR(9));

wprintw( w, " ERROR " );

wattrset(w,A_BOLD|COLOR_PAIR(7));

for (inti=1;i<=WCOLS-2;i++)

for (int j=1;j<=WLINES-2;j++)

{mvwaddstr(w,j,i," "); }

wrefresh(w);//отобразить stdscr

wattrset(w, A_BOLD|COLOR_PAIR(8));

mvwaddstr(w,WLINES/2-1,(WCOLS-strlen(text))/2, text);

wattrset(w,A_BOLD|A_UNDERLINE|COLOR_PAIR(9));

mvwaddstr(w,WLINES/2+1,(WCOLS-2)/2, "OK");

wrefresh(w);

keypad( w, TRUE );

while (1)

{

switch (wgetch(w))

{

case KEY_ESC:

case 10: goto out;

} }

out:

delwin(w);

refresh();}

newwin - создаёт новое окно

mvwaddstr - добавляет строку в новой позиции в окне

wrefresh - обновляет окно экрана терминала

wattrset - установка атрибутов окна

wmove - перемещение позиции вывода

wprintw - вывод в окно

Одна функция curses может иметь две или более версий.

w Обозначает функцию, для которой в качестве аргумента должно быть задано окно.

p Обозначает функцию, для которой в качестве аргумента должна быть задана панель.

mv Обозначает функцию перехода к указанным координатам.

Порядок создания собственных библиотек

Для создания библиотеки были использованы следующие файлы:

- cutf.cpp, remf.cpp - исходный файл C++, содержит собственные функции.

- drawlib.cpp - исходный файл C++, содержит изменённые функции исходной программы.

- directory.h - заголовочный файл для cutf.cpp, remf.cpp

Откомпилировать name.cpp для получения объектного модуля name.o

gcc -c cutf.cpp

gcc -c remf.cpp

Откомпилировать drawlib.cpp для получения объектного модуля drawlib.o

gcc -c drawlib.cpp

Полученные объектные модули архивируются в библиотеку libmaked.a:

ar -r libmaked.a cutf.o remf.o

ar -r libdraw.a drawlib.o

Библиотека создана. Для подключения её к программе при компиляции необходимо указать:

- ключ L, аргумент которого - путь к текущему каталогу;

- ключ l с именем библиотеки без букв lib.

gcc shablon.cpp -o shablon -lncurses -L/home/kurs -ldraw -lmaked

Список использованной литературы:

1. А. Робачевский. Операционная система UNIX. -СПб.:БХВ-Петербург, 2010.

2. Методические указания к выполнению курсовой работы по дисциплине “Системное программное обеспечение“ - Новочеркасск, 2012 г.

3. Справочная система интернет ресурса«openNET» http://www.opennet.ru

Скриншоты

Начало работы с программой

Перемещение файлов

Попытка открыть папку не имея доступа

Размещено на Allbest.ru


Подобные документы

  • Мониторинг системных вызовов. Системные вызовы shmget, shmat, shmctl, shmdt. Написание и внедрение модуля ядра. Выбор языка программирования. Структура программного обеспечения. Реализация мониторинга управления и удаления сегментов разделяемой памяти.

    курсовая работа [91,4 K], добавлен 24.06.2009

  • Исследование методов интерполяции функции и разработка программного продукта для автоматизации расчётов, выполняемых в данных методах. Обоснование выбора языка программирования. Требования к программе и программному изделию. Организация работы с ПЭВМ.

    дипломная работа [2,1 M], добавлен 16.06.2017

  • Требования к операционной системе Linux, встраиваемые приложения. Предсказуемость поведения, свойства ОС реального времени. Структура ядра; системные вызовы; работа с файлами. Стандартные устройства; обзор программирования; компилирование и линковка.

    лекция [112,2 K], добавлен 29.07.2012

  • Общая организация файловой системы. Виртуальные страницы. Команды для работы с ФС. Способы организации файлов. Системные вызовы управления процессами. Алгоритм работы планировщика процессов. Мультипрограммный режим работы ОС. Структура ядра системы.

    курсовая работа [645,3 K], добавлен 23.03.2015

  • Изучение операционной системы Linux: элементов файлов, структуры каталогов и прав доступа к ним. Получение практических навыков по работе с некоторыми командами данной ОС. Теоретические сведения и практические навыки по работе с процессами Linux.

    лабораторная работа [847,5 K], добавлен 16.06.2011

  • Требования к программе или программному изделию, к информационной и программной совместимости. Проектирование программного продукта. Процедура установки и удаления. Описание интерфейса, главное окно приложения. Основные возможности пользователя.

    курсовая работа [678,1 K], добавлен 15.02.2016

  • Назначение и цели создания системы. Требования к программе или программному изделию, к информационной и программной совместимости, к составу и параметрам технических средств. Алгоритм Rijndael. Назначение и условия применения программного продукта.

    дипломная работа [1,3 M], добавлен 01.03.2009

  • Алгоритм составления шаблонов имен при поиске файлов. Описание и функции объекта "Мой компьютер". Способы выделения группы файлов. Назначение кнопок на панели инструментов в программе "Проводник". Копирование в буфер обмена. Функции электронной почты.

    контрольная работа [59,8 K], добавлен 18.06.2015

  • Linux - ядро операционной системы с монолитной архитектурой. Прародители операционной системы Linux, ее стабильные и экспериментальные версии. Процесс внедрения Linux и свободного программного обеспечения в школах и государственных учреждениях России.

    реферат [18,2 K], добавлен 19.01.2013

  • Требования к аппаратной части компьютера и программному обеспечению. Установка системы VMware. Местонахождение файлов заголовков, соответствующих запущенной версии ядра. Создание виртуальной машины в операционной системе MS Windows XP Professional.

    контрольная работа [1,6 M], добавлен 22.10.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.